我有那个班级
public class jQGridModel
{
public List<jQGridModelItem> Items { get; set; }
public class jQGridModelItem
{
public DBUser UserItem { get; set; }
public int ItemsSold { get; set; }
}
}
和DBUser
类(由实体框架生成)
public class DBUser
{
public string UserName { get; set; }
public string UserID { get; set; }
public string PromoCode { get; set; }
...
}
我有一些jQGridModel
Items
对象。这是“简单”问题 - 我想根据Items
UserName
列表asc / desc进行排序
我试过
jQGridModel result = new jQGridModel();
result.Items = GetItems();
result.Items = result.Items.OrderByDescending(x => x.UserItem.UserName).ToList();
但是我看到收录顺序没有改变。我做错了什么?
完整的代码:
var query = (from x in db.User
where (...)
select x);
var totalRecords = query.Count();
jQGridModel result = new jQGridModel();
result.Items = query.OrderBy(x => x.UserID).Skip(page * pageSize)
.Take(pageSize)
.Select(x => new jQGridModel.jQGridModelItem
{
UserItem = x,
ItemsSold = (from o in db.Order
where
o.PromoCode.Equals(x.PromoCode)
select o).Count()
})
.ToList();
result.Items = result.Items.OrderByDescending(x => x.UserItem.UserName).ToList();
答案 0 :(得分:2)
我应该说它“不会返回IQueryable”,但事实并非如此。因此,您按照获得的顺序获取列表,然后您正尝试通过(最可能)延迟加载的属性进行排序。所以你并没有真正做你认为自己在做的事情。 :)
将UserName作为jQGridModelItem的属性放置,或者如果您确实需要完整的DBUser实体,可以先加载它,然后排序。
修改强>
实际上,只需在初始顺序中指定正确的顺序:
result.Items = query.OrderBy(x => x.UserName).Skip(page * pageSize)
.Take(pageSize)
.Select(x => new jQGridModel.jQGridModelItem
{
UserItem = x,
ItemsSold = (from o in db.Order
where
o.PromoCode.Equals(x.PromoCode)
select o).Count()
})
.ToList();