2012-04-25 11 views
0

私はEntity Framework 4.0 POCOで作業しており、テーブル/エンティティのプライマリキー以外のフィールドを持つリストページでグリッドを並べ替える方法を探しています。カスタムページを追加する必要はありませんが、そうしなければオーバーヘッドとなるソリューションの1つです。Entity Framework 4.0のテーブルの主キー以外の列を並べ替える方法はありますか?

ありがとうございます。あなたが戻ってきている結果はIEnumerableを< YourPocoClass>またはIQueryableを< YourPocoClass>のようなものがある場合は

答えて

0

を次の属性我々が使用する必要のあるエンティティのメタデータクラス、すなわち、DefaultSortOrderColumn

[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)] 
public class DefaultSortColumnAttribute : Attribute 
{ 
    public DefaultSortColumnAttribute(string sortColumn, bool sortDescending) 
    { 
     this.SortColumn = sortColumn; 
     this.SortDescending = sortDescending; 
    } 

    public string SortColumn { get; private set; } 

    public bool SortDescending { get; private set; } 
} 

次に部分エンティティクラスでは、この属性を使用して -

私は、ソート列を追加するための新しい属性クラスを追加しましたソート列

私たちはその後、定義された任意のsortcolumnsがあるかどうかを決定し、Page_Loadの中にそれをソートするPageTemplates \ List.aspxでこの属性を使用することができます
[DefaultSortColumn("YourSortColumn", false)] 
public partial class YourDBEntity 
{ 
} 

MetaTable table = GridDataSource.GetTable(); 

if (!IsPostBack && table.Attributes.OfType<DefaultSortColumnAttribute>().Count() > 0) 
{ 
    string sortColumn = table.Attributes.OfType<DefaultSortColumnAttribute>().FirstOrDefault().SortColumn; 
    bool sortDescending = table.Attributes.OfType<DefaultSortColumnAttribute>().FirstOrDefault().SortDescending; 
    GridView1.Sort(sortColumn, sortDescending ? SortDirection.Descending : SortDirection.Ascending); 
} 

この属性をさらに拡張し、クラスではなくプロパティに設定することができます。そうすれば、複数の列を並べ替えることができます。

返信いただきありがとうございます。ハッピーコーディング。

1

、あなたは常に.OrderByた(p => p.SomePropertyOtherThanPK)

0

を使用することができますあなたはこの操作を行うだけでできます。

var list = yourDbContext.YourDbSet.OrderBy(m=>m.Property); 

それとも、文字列でソートしたい場合は、あなたが使用することができ、クライアントによってグリッドフォームから動的なLINQの来る:問題ワット解決 http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

関連する問題