2017-04-24 56 views
0

我有一個訂單表,我想要在視圖中顯示內容。我通常會做這樣的:如何顯示使用不同的列表進行列表?

return View(db.Orders.ToList()); 

然後調用我希望在視圖中顯示的字段:

<th> 
     @Html.DisplayNameFor(model => model.OrderNum) 
    </th> 
    <td> 
     @Html.DisplayNameFor(model => model.CreateDate) 
    </td> 
    .... 
</th> 

但是,我該怎麼辦,如果我想顯示同桌ToList()但我想要使它返回DISTINCTOrderNum行。這是我曾嘗試:

var UserOrders = (from uo in db.Orders select new { uo.OrderNum, uo.CreateDate, ... }).ToList(); 
     var result = UserOrders.GroupBy(x=>x.OrderNum).Select(y=>y.First()); 
     return View(result.ToList()); 

哪些返回以下錯誤

傳遞到字典的模型項的類型爲「System.Collections.Generic.List 1[<>f__AnonymousType9 10 System.Int32, System.DateTime,System.String,System.String,System.String,System.String,System.Decimal,System.Nullable 1[System.Boolean],System.Nullable 1 [System.Boolean],Project.Models.DeliveryOption]]',但此字典需要一個模型「System.Collections.Generic.IEnumerable`1 [Project.Models.Order]'類型的項目。

return View(db.Orders.ToList().Distinct()); 

而忽略在端的不同命令。因爲它會返回所有記錄。

回答

1

您第一次嘗試接近,但你並不需要投射到一個匿名類型這應該工作:

 var result = db.Orders.GroupBy(x=>x.OrderNum) 
      .Select(y=>y.FirstOrDefault()); 
     return View(result.ToList()); 

我使用FirstOrDefault()因爲去年我檢查了Entity Framework不喜歡在查詢表達式裏面做.First()

原因.ToList().Distinct()沒有工作是因爲程序不知道什麼使得兩個Order s「相等」,所以它默認查看他們的內存地址。由於所有返回的對象都有不同的內存地址,因此它認爲它們都是唯一的。

+0

謝謝,這工作! – Skullomania

1

您投影結果匿名類型這是造成問題,因爲你的觀點是強烈IEnumerable<Project.Models.Order>類型不IEnumberable<Anonymous>約束,你應該分組後投射到Order

var UserOrders = (from uo in db.Orders 
        select new Order 
          { 
           OrderNum =uo.OrderNum, 
           CreatedDate = uo.CreateDate, ... 
           }).ToList(); 

現在你的下一個代碼將返回正確類型的結果:

var result = UserOrders.GroupBy(x=>x.OrderNum).Select(y=>y.First()); 
return View(result.ToList()); 

可以居然在數據庫端分組的事情,如果你不突出和materializ e通過這樣做的結果:

var reuslt = db.Orders.GroupBy(x=>x.OrderNum) 
         .Select(x=>x.First()); 
return View(result.ToList()); 
0

你可以做到這一點,而不需要匿名類型。像下面這樣的東西應該工作:

return View(db.Orders.GroupBy(x=>x.OrderNum).Select(y=>y.First()).ToList()); 
+0

當你已經完成GroupBy – StriplingWarrior

+0

的好處時,不需要那個最後的'Distinct()',不打算離開它。:) – Simon