将列表返回到仅具有唯一编号的视图
Posted
技术标签:
【中文标题】将列表返回到仅具有唯一编号的视图【英文标题】:Return List to View with only unique numbers 【发布时间】:2016-02-23 09:51:25 【问题描述】:我的应用程序从 OrderRows 表中返回一个列表,如下所示:
var allOrders = db.OrderRows.ToList();
这就是我的班级在 OrderRows 中的样子:
public class OrderRows
public int ID get; set;
[Display(Name = "Produktid")]
public int ProductID get; set;
[Display(Name = "Orderid")]
public int OrderID get; set;
[Display(Name = "Pris")]
public float Price get; set;
public virtual Orders Orders get; set;
订单类:
public class Orders
public int ID get; set;
[Display(Name = "Orderdatum")]
public DateTime Orderdate get; set;
public int CustomersID get; set;
public virtual Customers Customers get; set;
public virtual ICollection<OrderRows> OrderRows get; set;
我正在做一个网上商店,我做得很简单。该表可以有多个 OrderID,但是当我将列表传递给视图时,我想做某种排序并且只查看唯一的订单。而不是这样的列表:
1
1
1
2
2
3
3
3
我想要这样:
1
2
3
然后我的想法是使用这个数字并能够选择该订单并更改其内容。是否可以返回只有唯一数字的列表?
【问题讨论】:
你只想要结果中的 id 吗? @PavanTeja 只有 OrderID 使用 var allOrders = db.OrderRows.Select(c => c.OrderID ).ToList().Distinct().OrderBy(p => p.OrderID) 你会得到所需的结果 不清楚您想要在视图中实际显示的内容。您想按OrderID
分组(并在每个组下显示与该订单ID 关联的记录(例如,可能有3 个不同的Product
和Price
值)还是只想要第一个OrderRows
对象对于每个唯一的 OrderID?
@StephenMuecke 我猜是后一种选择
【参考方案1】:
你可以使用Distinct()
扩展方法
如果你想要唯一的 orderIds
var allOrders = db.OrderRows.ToList().Select(o=>o.OrderID ).Distinct()
如果您想要具有第一行的唯一 orderIds
var allOrders=db.OrderRows.ToList().GroupBy(o=>o.OrderID ).Select(x=>x.First()).ToList()
【讨论】:
感谢代码,但我收到这样的错误:传递到字典中的模型项的类型为 'System.Data.Entity.Infrastructure.DbQuery1[System.Int32]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable
1[WebShop_2.Models.订单行]'。有什么问题?
谢谢,但现在我收到另一个错误:传入字典的模型项的类型为“System.Linq.Enumerable+1[System.Int32]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable
1[WebShop_2.Models.OrderRows]”。 试试这个:-
var allOrders = db.OrderRows.ToList();
var distinctOrders=allOrders.Distinct();
view(distinctOrders);
【讨论】:
【参考方案3】:如果我没记错的话,你想要的是GroupBy
你的查询是这样的——
var allOrders=db.OrderRows.GroupBy(o=>o.Orders).ToList()
将其渲染到视图-
@foreach(var order in allOrders)
<p>@order.Key.ID</p>
foreach(var orderItem in order.ToList())
<ul>
<li>@orderItem.ProductID, @orderItem.Price</li>
</ul>
【讨论】:
以上是关于将列表返回到仅具有唯一编号的视图的主要内容,如果未能解决你的问题,请参考以下文章