使用linq进行分组,然后使用where条件运行select查询
本文关键字:where 条件 运行 查询 select 然后 linq 使用 | 更新日期: 2023-09-27 18:19:37
我有一个类,OrderInfo如下所示,
class OrderInfo
{
string Product
boolean NoIssues
}
我有一个订单信息列表。我想做的是了解每种产品是否存在问题。下面是我的清单的一个例子。
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()
所以我相信上面的代码会给我一个独特的产品列表,我可以循环使用。但不确定如果我使用一个带有where条件的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的回答更直观。