2012-04-28 20 views
42

LINQ TO SQLでunion allを使用する方法。 次のコードを使用してユニオンを作成しましたが、これをユニオンにすべて使用する方法は?LINQでunion allを使用するには?

List<tbEmployee> lstTbEmployee = obj.tbEmployees.ToList(); 
List<tbEmployee2> lstTbEmployee2 = (from a in lstTbEmployee 
            select new tbEmployee2 
            { 
             eid = a.eid, 
             ename = a.ename, 
             age = a.age, 
             dept = a.dept, 
             doj = a.doj, 
             dor = a.dor 

            }).Union(obj.tbEmployee2s).ToList(); 
+3

あなたは「受け入れられた」とジョン・クローウェルの答えをマークしなければなりません – arviman

答えて

87

Concat SQLでUNION ALLのLINQと同等です。

UnionConcatを使用する方法を示すために、LINQPadに簡単な例を設定しました。 LINQPadがない場合は取得してください。

これらのセット操作で異なる結果を表示するには、第1および第2のデータセットに少なくとも一部のオーバーラップが必要です。以下の例では、両方のセットに「not」という単語が含まれています。

LINQPadを開き、言語ドロップダウンをC#ステートメントに設定します。クエリペインに次のように貼り付けて、それを実行します。LinqPadで

string[] jedi = { "These", "are", "not" }; 
string[] mindtrick = { "not", "the", "droids..." }; 

// Union of jedi with mindtrick 
var union = 
    (from word in jedi select word).Union 
    (from word in mindtrick select word); 

// Print each word in union 
union.Dump("Union"); 
// Result: (Note that "not" only appears once) 
// These are not the droids... 

// Concat of jedi with mindtrick (equivalent of UNION ALL) 
var unionAll = 
    (from word in jedi select word).Concat 
    (from word in mindtrick select word); 

// Print each word in unionAll 
unionAll.Dump("Concat"); 
// Result: (Note that "not" appears twice; once from each dataset) 
// These are not not the droids... 

// Note that union is the equivalent of .Concat.Distinct 
var concatDistinct = 
    (from word in jedi select word).Concat 
    (from word in mindtrick select word).Distinct(); 

// Print each word in concatDistinct 
concatDistinct.Dump("Concat.Distinct"); 
// Result: (same as Union; "not" only appears once) 
// These are not the droids... 

結果は次のようになります。

enter image description here

関連する問題