2012-12-03 56 views
1

我有類OrderByDescending(),而不影響

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; } 
    ... 
} 

我有一些ItemsjQGridModel對象。而這裏的「簡單」的問題 - 我想將Items名單遞增/遞減基礎上的UserName

排序我已經試過

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

不是指定的'result.Items'兩次,如果你這樣做'VAR項目,會發生什麼=結果.Items.OrderByDescending(x => x.UserItem.UserName).ToList();'?收藏是否重新訂購? – mattytommo

+3

很難說這些片段有什麼問題。請發佈簡短但完整的*程序來證明問題。 –

+0

@mattytommo不會解決問題,如果有一個 –

回答

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