簡體   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