Linq:从两个Linq源生成一个结果

Linq:从两个Linq源生成一个结果,linq,concat,Linq,Concat,我有两个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')

我有两个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);

我想把它放在一个linq语句中。

您只需使用
Concat
。但是,您只需将查询放在那里,而不是
linq.Concat(linq2)

var joined = list1.Where (w => w.Contains("o"))
                  .Concat(list2.Where (w => w.Contains("l")));
Concat没有等效的查询语法。()

所以你会这样做:

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

如果您想要一个
List
对象,
var List=joined.ToList()
您想同时“合并”(
联合
)还是同时“合并”?在前一种情况下,您必须重写
GetHashCode
+
Equals
或提供一个自定义
IEqualityComparer
。我是否可以将其放入一个带有from项的linq语句中……,因为我非常喜欢这种语法:)
var joined = (from item in list1
            where item.Contains('o')
            select item)
              .Concat(from item in list2
            where item.Contains('l')
            select item);