OrderByDescending()没有效果

时间:2012-12-03 20:03:05

标签: c#

我有那个班级

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

1 个答案:

答案 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();