使用 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
我只想返回组有多个元素的结果。这意味着不应返回最后一个结果行。如何调整查询以完成此操作。
提前非常感谢
乙
只需添加一个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 ...