Linq查询具有三列的两个数据库表

时间:2014-07-09 20:05:28

标签: c# linq

我有问题。我的数据库中有两个表,它们都具有相同的结构。我想在我的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();

但是我收到了一个错误。如果我为每个表只用一列就可以了,那就可以了。

如果有人可以帮我用两列或更多列来做这件事会很棒:)

1 个答案:

答案 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 typevar关键字非常方便,但如果发现编译时错误,要做的第一件事就是通过用显式类型替换它来重写表达式。< / p>