C# 林:合并两组
这是表格,我们把它叫做C# 林:合并两组,c#,linq,C#,Linq,这是表格,我们把它叫做temp table: ID Type tb1Id tb2Id Detail 1 tb1 a null Detail of 1 2 tb2 null b Detail of 2 3 tb1 a null Detail of 3 4 tb2 null b Detail of 4 现在这个a和
temp table
:
ID Type tb1Id tb2Id Detail
1 tb1 a null Detail of 1
2 tb2 null b Detail of 2
3 tb1 a null Detail of 3
4 tb2 null b Detail of 4
现在这个a
和b
是两个不同表的外键
我想把这张桌子分组
我试过这个:
var list1 = db.Temp.Where(x=> x.tb1Id != null).GroupBy(x=> x.tb1.SomeOtherId);
var list2 = db.Temp.Where(x=> x.tb2Id != null).GroupBy(x=> x.tb2.SomeOtherId);
var final = list1.Union(list2); <-- This doesn't work
var list1=db.Temp.Where(x=>x.tb1Id!=null).GroupBy(x=>x.tb1.SomeOtherId);
var list2=db.Temp.Where(x=>x.tb2Id!=null).GroupBy(x=>x.tb2.SomeOtherId);
var final=列表1.联合(列表2) 您可以使用匿名类型执行此操作
var reclassified = db.Temp
.Where(item => item.tb1Id != null || item.tb2Id != null)
.Select(item =>
new
{
data = item,
FK = (item.tb1ID != null) ?
item.tb1.SomeOtherId :
item.tb2.SomeOtherId
}
);
运行此查询后,您将拥有id为的所有对象。然后,您应该能够完成与使用它相同的任务。注意,实际数据随后以“数据”的形式存储在匿名数据库中,对于“SomeOtherId”,您有一个新的属性/列“FK”您可能需要一个中间类。。具有所谓的公共Id
,而不是在两个不同的列中。。因此,list1
和list2
的结果可以在同一个CommonClass
下组合,并使用Id
作为组的键
只需执行db.Temp.GroupBy(x=>x.tb1.SomeOtherId??x.tb2.SomeOtherId)
,会出现什么错误?列表1和列表2的类型是什么?@juharr谢谢你的建议。我刚刚将代码更改为db.Temp.GroupBy(x=>x.tb1!=null?x.tb1.SomeOtherId:x.tb2.SomeOtherId)
,它可以工作!
db.Temp.GroupBy(x => x.tb1Id ?? x.tb2Id);