使用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语句,而不返回任何内容,会发生什么?

使用linq进行分组,然后使用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的回答更直观。