2014-11-03 100 views
1

我有兩個linq語句,它們都產生相同的tye的輸出。我怎樣才能將這兩個linq語句合併到一起,以便我得到一個列表。Linq:從兩個linq源產生一個結果

例子:

var list1 = new List<string>() {"hello", "world", "!"}; 
var list2 = new List<string>() {"hello 2", "world 2", "! 2"}; 

var linq1 = from item in list1 
      where item.Contains('o') 
      select item; 
var linq2 = from item in list2 
      where item.Contains('l') 
      select item; 

var joined = linq1.Concat(linq2); 

輸出:

[0]: "hello" 
[1]: "world" 
[2]: "hello 2" 
[3]: "world 2" 

我想有這種在一個單一的LINQ語句。

+1

linq1.Union(linq2)? – 2014-11-03 22:46:07

+0

如果你想要一個'List'對象,'var list = joined.ToList();' – 2014-11-03 22:47:41

+0

你想要「合併」('Union')嗎?在前一種情況下,您必須重寫'GetHashCode' +'Equals'或提供一個自定義的'IEqualityComparer''。 – 2014-11-03 22:49:08

回答

2

您只需使用Concat就可以了。但不是linq.Concat(linq2),你只要把查詢有:

var joined = list1.Where (w => w.Contains("o")) 
        .Concat(list2.Where (w => w.Contains("l"))); 

的毗連可是沒有一個查詢語法等同。 (http://msdn.microsoft.com/en-us/library/bb386979(v=vs.110).aspx

所以,你會做這樣的事情:

var joined = (from item in list1 
      where item.Contains('o') 
      select item) 
       .Concat(from item in list2 
      where item.Contains('l') 
      select item); 
+0

我可以把它放入一個linq聲明中,因爲我很喜歡這個語法:) – Stefan 2014-11-03 22:59:38