如何使用LINQ在List <Order>中获取产品的唯一条目

Jon*_*röm 3 c# linq linq-to-objects

我有一个经典的Order - > Order Row场景,如下所示:

public class Order 
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<OrderRow> OrderRows { get; set; }
}

public class OrderRow
{
    public int Id { get; set; }
    public int ProductId { get; set; }
    public int Amount { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

和一个List <Order>.从订单列表中我想获得所有唯一ProductIds的列表.

我这样解决了:

var orders = new List<Order>();
// TODO get the orders from DB
var products = new Dictionary<int,int>();
orders.ForEach(order => order.OrderRows.ForEach(row => products[row.ProductId]=row.ProductId));
Run Code Online (Sandbox Code Playgroud)

但是我对我使用Dictionary有疑问,为什么我没有使用LINQs GroupBy,还评论说它不是很清楚它是如何工作的.我认为解决方案很好,但评论让我想尝试在LINQ中解决它,但出于某种原因,我尝试了一个砖墙.

如何从LINQ订单列表中获取唯一产品ID列表?

Mat*_*ton 7

未经测试,但如何:

var products = orders.SelectMany(o => o.OrderRows)
                     .Select(r => r.ProductId)
                     .Distinct();
Run Code Online (Sandbox Code Playgroud)