我有以下代码(如果你有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
我只想返回组中有多个元素的结果。这意味着不应返回最后一个结果行。我如何调整我的查询来实现这一目标。
非常感谢提前
乙
答案 0 :(得分:2)
只需添加Where
子句
var result = itemlist1.Union(itemlist2)
.GroupBy(p => p.id)
.Where(g => g.Count() > 1)
...
答案 1 :(得分:0)
最短的答案是只有一个元素的过滤器组:
itemlist1.Union(itemlist2).GroupBy(p=>p.id).Where(g=>g.Count()==2).Select ...