繁体   English   中英

使用linq进行分组,然后使用where条件运行select查询

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM