我有问题。我的数据库中有两个表,它们都具有相同的结构。我想在我的Linq查询中使用Union
将两个表合并在一起,但我不能将它们与多个列合并。
这是我的代码:
var result1 = from t in db.table1 select new { t.FieldOne, t.FieldTwo };
var result2 = from g in db.table2 select new { g.FieldOne, g.FieldTwo};
var combinedTable= result1.Union(result2).ToList();
但是我收到了一个错误。如果我为每个表只用一列就可以了,那就可以了。
如果有人可以帮我用两列或更多列来做这件事会很棒:)
答案 0 :(得分:-1)
您的代码定义了2个匿名类型。
result1
的类型为IQueryable<Anonymous1>
result2
的类型为IQueryable<Anonymous2>
您无法合并不同类型的集合。
那么,解决方案是什么?
定义一个简单的中间类型(就像编译器在定义匿名类型时所做的那样)。
class MyResultItem
{
public string FieldOne { get; set; }
public string FieldTwo { get; set; }
}
IQueryable<MyResultItem> result1 = from t in db.table1 select new MyResultItem {
FieldOne = t.FieldOne,
FieldTwo = t.FieldTwo
};
IQueryable<MyResultItem> result2 = from g in db.table2 select new MyResultItem {
FieldOne = g.FieldOne,
FieldTwo = g.FieldTwo
};
IEnumerbale<MyResultItem> combinedTable = result1.Union(result2).ToList();
如您所见,我不使用关键字var
。那是因为这不是教学。 关于LINQ使用的许多问题都与打字的理解有关。 anonymous type
和var
关键字非常方便,但如果发现编译时错误,要做的第一件事就是通过用显式类型替换它来重写表达式。< / p>