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);