使用 linq 分组,但在结果中省略某些项

本文关键字:中省 结果 linq 分组 使用 | 更新日期: 2023-09-27 18:33:59

我有以下代码(如果您有linqpad,则可以复制粘贴并运行代码)

   void Main()
    {
        List<data_item> itemlist1= new List<data_item>();
        List<data_item> itemlist2= new List<data_item>();
        itemlist1.Add(new UserQuery.data_item 
        {
         id=1,
         LeftHasdata=true 
        })
        ;
        itemlist1.Add(new UserQuery.data_item 
        {
         id=2,
         LeftHasdata=false 
        })
        ;
        itemlist2.Add(new UserQuery.data_item 
        {
         id=2,
          RightHasData=false 
        })
        ;
        itemlist2.Add(new UserQuery.data_item 
        {
         id=1,
          RightHasData=false 
        })
        ;
        itemlist2.Add(new UserQuery.data_item 
        {
         id=3,
          RightHasData=false 
        })
        ;

        //var result= itemlist1.Concat(itemlist2).GroupBy(p=>p.id).Select(s  => new UserQuery.data_item {
        var result= itemlist1.Union(itemlist2).GroupBy(p=>p.id).Select(s  => new UserQuery.data_item {
          id=s.Key,
          LeftHasdata=s.Where(rd=>rd.LeftHasdata!=null).Select(d=>d.LeftHasdata).FirstOrDefault(),
           RightHasData=s.Where(rd=>rd.RightHasData!=null).Select(d=>d.RightHasData).FirstOrDefault(),
           })
           ;
        result.Dump();
    }
// Define other methods and classes here
 public class data_item
 {
     public int id {get;set;}
     public bool? LeftHasdata  { get; set; }
     public bool? RightHasData { get; set; }
}

我得到以下结果:

>id LeftHasdata RightHasData 
>1 True False 
>2 False False 
>3 null  False 

我只想返回组有多个元素的结果。这意味着不应返回最后一个结果行。如何调整查询以完成此操作。

提前非常感谢

使用 linq 分组,但在结果中省略某些项

只需添加一个Where子句

var result = itemlist1.Union(itemlist2)
                      .GroupBy(p => p.id)
                      .Where(g => g.Count() > 1)
                      ...

最短的答案是只有一个元素的过滤器组:

itemlist1.Union(itemlist2).GroupBy(p=>p.id).Where(g=>g.Count()==2).Select ...