如何使用Linq从父列表中选择和分组复杂的子对象

时间:2010-04-10 12:38:31

标签: c# linq linq-to-entities

如何使用Linq从父列表中选择和分组复杂的子对象。

我有一个 OrderList 每个订单对象都有一个 OrderProductVariantList (OrderLineList),而每个 OrderProductVariant 对象都有ProductVariant,然后是 ProductVariant 对象将包含产品对象,其中包含产品信息。

我的目标是从订单列表中选择和分组最受欢迎的产品。

任何人都可以帮我吗?

非常感谢。

2 个答案:

答案 0 :(得分:3)

您的描述很难理解,但我认为您只是希望了解产品并按发生次数对其进行排名。 SelectMany将对此有所帮助。

 var query = orderList.SelectMany( o => o.OrderLineList )
                        // results in IEnumerable<OrderProductVariant>
                      .Select( opv => opv.ProductVariant )
                      .Select( pv => p.Product )
                      .GroupBy( p => p )
                      .Select( g => new {
                                    Product = g.Key,
                                    Count = g.Count()
                       });

答案 1 :(得分:1)

查询不是结果。要查看结果,您可以遍历query对象:

foreach (var result in query) {
    Console.WriteLine(result);
} 

至于为什么查询在监视窗口中不可用,我只能想象它要么尚未在范围内,要么已经超出了范围。尝试在您分配给查询的行所在行之后立即在该行上放置断点。