有没有办法对Entity Framework 4.0中表的主键以外的任何列进行排序?

时间:2012-04-25 10:32:21

标签: entity-framework

我正在研究Entity Framework 4.0 POCO,并寻找一种方法,使用表/实体中主键以外的字段对列表页面上的网格进行排序。我不想添加自定义页面,虽然它是解决方案之一,如果可以这样做,那将是一个开销。

提前致谢。

3 个答案:

答案 0 :(得分:1)

如果你回来的结果是IEnumerable< YourPocoClass>或IQueryable< YourPocoClass>,您可以随时使用.OrderBy(p => p.SomePropertyOtherThanPK)

答案 1 :(得分: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

答案 2 :(得分: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);
}

此属性可以进一步扩展并设置为属性而不是类。这样,我们就可以对多列进行排序。

感谢那些被拒绝的人。快乐的编码。