我正在研究Entity Framework 4.0 POCO,并寻找一种方法,使用表/实体中主键以外的字段对列表页面上的网格进行排序。我不想添加自定义页面,虽然它是解决方案之一,如果可以这样做,那将是一个开销。
提前致谢。
答案 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);
}
此属性可以进一步扩展并设置为属性而不是类。这样,我们就可以对多列进行排序。
感谢那些被拒绝的人。快乐的编码。