簡體   English   中英

如何顯示要使用表的列表?

[英]How do I display a table to list using distinct?

我有一個要在視圖中顯示其內容的訂單表。 我通常會這樣:

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

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

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

但是,如果我想顯示相同的表ToList()但又想使它顯示以便返回DISTINCT OrderNum行,該怎么OrderNum 這是我嘗試過的:

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

最后忽略了不同的命令。 因為它返回所有記錄。

您正在將結果投影到匿名類型 ,這會導致問題,因為您的視圖與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());

如果您不通過以下方式進行投影和實現結果,則實際上可以在數據庫端進行分組:

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

您的第一次嘗試已結束,但是您無需投影為匿名類型。這應該可以:

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

我正在使用FirstOrDefault()因為最后我檢查了Entity Framework不喜歡在查詢表達式中執行.First()

.ToList().Distinct()不起作用的原因是因為程序不知道是什么使兩個Order等於“相等”,所以它默認情況下查看其內存地址。 由於所有返回的對象都具有不同的內存地址,因此認為它們都是唯一的。

您可以執行此操作,而無需使用匿名類型。 類似於以下內容的東西應該起作用:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM