1

我只是想对 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)”的类型参数。尝试明确指定类型参数。

谁能指导我如何解决这个问题?

提前致谢

厘米

4

2 回答 2

3

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

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

ETC

于 2012-05-31T10:14:01.440 回答
1

为了让编译器成功推断并集结果的类型,Query1 和 Query2 返回的两个匿名类型需要相同(实际上编译器生成的是单一类型)。

重命名匿名类型的属性,以便两者都使用aor b,不混用。a.Key并且b.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);
于 2012-05-31T10:16:46.760 回答