[英]use linq to group by and then run select query with where condition
我有一个类,如下所示的OrderInfo,
class OrderInfo
{
string Product
boolean NoIssues
}
我有一个OrderInfo列表。 我想做的是了解每种产品是否存在问题。 因此,以下是我的列表示例。
ProductList
Product NoIssues
ABC true
ABC true
ABC false
ABC true
EFG true
EFG true
EFG true
EFG true
EFG true
以下是我想要的结果。
Result
ABC false
EFG true
因此,我将使用LINQ按产品分组以获取唯一的产品列表,然后遍历该列表以运行选择查询,在该查询中我根据NoIssues = false进行过滤。 但是不确定如何执行此操作,或者这是否是最佳方法
var res = (from ord in ProductList
group ord by ord.Product).ToList()
因此,我相信上面的代码将为我提供一个可以循环浏览的独特产品列表。 但是不知道如果我在条件不返回任何内容的情况下使用select语句会发生什么情况?
您可以使用全部 :
List<OrderInfo> result = list.GroupBy(x => x.Product)
.Select(x => new OrderInfo
{
Product = x.Key,
NoIssues = x.All(z => z.NoIssues)
}).ToList();
或者,如果您更喜欢查询语法:
List<OrderInfo> result = (from ord in ProductList
group ord by ord.Product into g
select new OrderInfo
{
Product = g.Key,
NoIssues = g.All(x => x.NoIssues)
}).ToList();
如果您不想为此创建新的Product对象,则可以使用:
var result = from product in ProductList
group product by product.Product into productGroup
select productGroup.Where(p => !p.NoIssues)
.DefaultIfEmpty(productGroup.First())
.First();
否则,@ Rahul Singh的答案会更直观。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.