0

私は Entity Framework 4.0 POCO に取り組んでおり、テーブル/エンティティの主キー以外のフィールドを使用してリスト ページのグリッドを並べ替える方法を探しています。カスタム ページを追加したくありませんが、それは解決策の 1 つですが、それ以外の方法で行うことができればオーバーヘッドになるためです。

前もって感謝します。

4

3 に答える 3

1

返される結果が IEnumerable< YourPocoClass > または IQueryable< YourPocoClass > のようなものである場合は、いつでも .OrderBy(p => p.SomePropertyOtherThanPK) を使用できます。

于 2012-04-25T10:35:44.043 に答える
0

これを行うことができます:

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

または、クライアントがグリッド フォームから取得した文字列で並べ替えたい場合は、Dynamic Linq を使用できます: http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1 -using-the-linq-dynamic-query-library.aspx

于 2012-04-25T10:38:34.813 に答える
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; }
}

次に、この属性を部分的なエンティティ クラス、つまりエンティティのメタデータ クラスに使用します。これには、並べ替え列を使用する必要があります。

[DefaultSortColumn("YourSortColumn", false)]
public partial class YourDBEntity
{
}

次に、PageTemplates\List.aspx でこの属性を使用して、定義されている sortcolumns があるかどうかを判断し、Page_Load でそれを使用して並べ替えることができます。

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);
}

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

回答者に感謝します。ハッピーコーディング。

于 2012-04-26T05:17:03.280 に答える