0

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

提前致谢。

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 -使用-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 中使用该属性来确定是否定义了任何排序列,并使用 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 回答