web-dev-qa-db-ja.com

2つのIQueryableリストをマージする方法

C#で2つのIQueryableリストのレコードをマージします。やってみる

IQueryable<MediaType> list1 = values;
IQueryable<MediaType> list2 = values1;
obj.Concat(obj1);

そして

IQueryable<MediaType> list1 = values;
IQueryable<MediaType> list2 = values1;
obj.Union(obj1);

しかし、list1が空の場合、結果のリストも空になります。私の場合、list1は空にすることができますが、list2はレコードを持つことができます。それらをどのようにマージすればよいですか?

47
Fraz Sundal

戻り値を使用していない-他のすべてのLINQ演算子と同様に、メソッドはexistingシーケンスを変更せず、newシーケンスを返します。だからこれを試してください:

var list3 = list1.Concat(list2);

または

var list4 = list1.Union(list2);

Unionは集合演算です-個別の値を返します。

Concatは、最初のシーケンスのアイテムを返し、その後に2番目のシーケンスのアイテムが続くだけです。結果のシーケンスには重複項目が含まれる場合があります。

Unionは、Concatの後にDistinctが続くと考えることができます。

74
Jon Skeet

でも

var result = Enumerable.Concat(list1, list2);

動作しませんか?

また、リストが空ではなく、nullであることを確認してください。

var result = Enumerable.Concat(
    list1 ?? Enumerable.Empty<MediaType>()
    list2 ?? Enumerable.Empty<MediaType>());

また試してみてください:

var result = Enumerable.Concat(
    list1.AsEnumerable(),
    list2.AsEnumerable());
2
abatishchev