0

我有以下代码(如果你有 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 

我只想返回 group 有多个元素的结果。这意味着不应返回最后一个结果行。我如何调整我的查询来实现这一点。

提前谢谢了

4

2 回答 2

2

只需添加一个Where子句

var result = itemlist1.Union(itemlist2)
                      .GroupBy(p => p.id)
                      .Where(g => g.Count() > 1)
                      ...
于 2013-10-04T13:06:45.683 回答
0

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

itemlist1.Union(itemlist2).GroupBy(p=>p.id).Where(g=>g.Count()==2).Select ...
于 2013-10-04T13:11:05.073 回答