LINQ联合错误-无法推断类型

LINQ联合错误-无法推断类型,linq,types,union,Linq,Types,Union,我只是尝试对2个linq查询执行简单的联合,如下所示: var results1 = from a in dt.AsEnumerable() where array1.Contains([COL_1]) select new { a = a.Key }; var results2 = from b in dt.AsEnumerable()

我只是尝试对2个linq查询执行简单的联合,如下所示:

var results1 = from a in dt.AsEnumerable()
               where array1.Contains([COL_1])
               select new
               {
                  a = a.Key
               };


var results2 = from b in dt.AsEnumerable()
               where array2.Contains([COL_2])
               select new
               {
                  b = b.Key
               };

var concatResults = results1.Union(results2);
但我得到了以下错误:

方法'System.Linq.Enumerable.Union(System.Collections.Generic.IEnumerable, 无法推断System.Collections.Generic.IEnumerable)' 从用法来看。尝试显式指定类型参数

谁能告诉我如何解决这个问题

提前谢谢


CM

您正在尝试合并两种不同的(匿名)类型,这是不可能的。您可以创建自己的类型来存储键值,以便两个查询投影到相同的类型

public class MyType
{
   string Key { get; set; }
}

var results1 = from a in dt.AsEnumerable()
                     where array1.Contains([COL_1])
                     select new MyType
                     {
                         Key = a.Key
                     };
var results1 = from a in dt.AsEnumerable()
             join arr1 in array1 on a.Field<int>("Col1") equals arr1 
             select new
             {
                 Key = a.Field<int>("Key")
             };


var results2 = from b in dt.AsEnumerable()
             join arr1 in array1 on b.Field<int>("Col2") equals arr1 
             select new
             {
                 Key = b.Field<int>("Key")
             };

var unioned = results1.Union(results2);

etc

您正在尝试合并两种不同的(匿名)类型,这是不可能的。您可以创建自己的类型来存储键值,以便两个查询投影到相同的类型

public class MyType
{
   string Key { get; set; }
}

var results1 = from a in dt.AsEnumerable()
                     where array1.Contains([COL_1])
                     select new MyType
                     {
                         Key = a.Key
                     };
var results1 = from a in dt.AsEnumerable()
             join arr1 in array1 on a.Field<int>("Col1") equals arr1 
             select new
             {
                 Key = a.Field<int>("Key")
             };


var results2 = from b in dt.AsEnumerable()
             join arr1 in array1 on b.Field<int>("Col2") equals arr1 
             select new
             {
                 Key = b.Field<int>("Key")
             };

var unioned = results1.Union(results2);

etc

为了让编译器成功推断联合结果的类型,Query1和Query2返回的两个匿名类型必须相同(事实上,编译器只生成一个类型)

重命名匿名类型的属性,以便两者都使用
a
b
,不混合<代码>a.键和
b.键
也需要是相同的类型

public class MyType
{
   string Key { get; set; }
}

var results1 = from a in dt.AsEnumerable()
                     where array1.Contains([COL_1])
                     select new MyType
                     {
                         Key = a.Key
                     };
var results1 = from a in dt.AsEnumerable()
             join arr1 in array1 on a.Field<int>("Col1") equals arr1 
             select new
             {
                 Key = a.Field<int>("Key")
             };


var results2 = from b in dt.AsEnumerable()
             join arr1 in array1 on b.Field<int>("Col2") equals arr1 
             select new
             {
                 Key = b.Field<int>("Key")
             };

var unioned = results1.Union(results2);
var results1=来自dt.AsEnumerable()中的a
在数组1中加入arr1。字段(“Col1”)等于arr1
选择新的
{
Key=a.字段(“Key”)
};
var results2=来自dt.AsEnumerable()中的b
在b上的数组1中加入arr1。字段(“Col2”)等于arr1
选择新的
{
键=b.字段(“键”)
};
var unioned=results1.Union(results2);

为了让编译器成功地推断联合结果的类型,Query1和Query2返回的两个匿名类型必须相同(事实上,编译器只生成一个类型)

重命名匿名类型的属性,以便两者都使用
a
b
,不混合<代码>a.键和
b.键
也需要是相同的类型

public class MyType
{
   string Key { get; set; }
}

var results1 = from a in dt.AsEnumerable()
                     where array1.Contains([COL_1])
                     select new MyType
                     {
                         Key = a.Key
                     };
var results1 = from a in dt.AsEnumerable()
             join arr1 in array1 on a.Field<int>("Col1") equals arr1 
             select new
             {
                 Key = a.Field<int>("Key")
             };


var results2 = from b in dt.AsEnumerable()
             join arr1 in array1 on b.Field<int>("Col2") equals arr1 
             select new
             {
                 Key = b.Field<int>("Key")
             };

var unioned = results1.Union(results2);
var results1=来自dt.AsEnumerable()中的a
在数组1中加入arr1。字段(“Col1”)等于arr1
选择新的
{
Key=a.字段(“Key”)
};
var results2=来自dt.AsEnumerable()中的b
在b上的数组1中加入arr1。字段(“Col2”)等于arr1
选择新的
{
键=b.字段(“键”)
};
var unioned=results1.Union(results2);

好的,谢谢您的回复。为什么它们是不同类型的?查询来自同一个表。。。很抱歉,我真的在努力克服无知的障碍!类型是由编译器创建的,它们的属性类型是从赋值中推断出来的,它们的名称是从名称中推断出来的。在本例中,有一个匿名类型具有a属性,另一个具有b属性。您可以显式使用自己的类型,也可以使两个匿名类型使用相同的属性名和类型。好的,谢谢您的回复。为什么它们是不同类型的?查询来自同一个表。。。很抱歉,我真的在努力克服无知的障碍!类型是由编译器创建的,它们的属性类型是从赋值中推断出来的,它们的名称是从名称中推断出来的。在本例中,有一个匿名类型具有a属性,另一个具有b属性。您可以使用自己的类型显式,也可以使两个匿名类型使用相同的属性名和类型。