将列表返回到仅具有唯一编号的视图

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 个不同的ProductPrice 值)还是只想要第一个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.IEnumerable1[WebShop_2.Models.订单行]'。有什么问题? 谢谢,但现在我收到另一个错误:传入字典的模型项的类型为“System.Linq.Enumerable+d__11[System.Int32]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable1[WebShop_2.Models.OrderRows]”。 您只希望结果中的组 id 或整个 OrderRows ? 我只想要一个 OrderID 列表,就像我在问题中显示的那样:1、2、3 而不是 1、1、1、1、2、2、2、3、3、3 如果有帮助的话,我添加了 Order 类!?【参考方案2】:

试试这个:-

 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>
 

【讨论】:

以上是关于将列表返回到仅具有唯一编号的视图的主要内容,如果未能解决你的问题,请参考以下文章

有没有更好的方法来创建 MediaWiki 编号列表?

如何在VBScript中返回具有唯一计数的数组列表

如何返回所有具有 N 总和的唯一数字组合 [重复]

从现有 json 列表中提取唯一值以创建唯一的列表视图构建器

使用视图在 couchDB 中的文档之间返回唯一值

使用 jq 将嵌套的 JSON 文件分解为具有唯一键的平面列表