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)' の型引数は、使用法から推測できません。型引数を明示的に指定してみてください。

この問題を解決する方法を誰か教えてもらえますか?

前もって感謝します

CM

4

2 に答える 2

3

2 つの異なる (匿名) タイプを結合しようとしていますが、これは不可能です。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
                     };

于 2012-05-31T10:14:01.440 に答える
1

コンパイラがユニオンの結果の型を正常に推論するには、Query1 と Query2 によって返される 2 つの匿名型が同一である必要があります (実際、コンパイラは単一の型を生成します)。

a両方がorを使用するように、匿名型のプロパティの名前を変更し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 に答える