C# Linq的最佳实践在哪里使用OR子句?

C# Linq的最佳实践在哪里使用OR子句?,c#,linq,C#,Linq,我发现使用Linq,用多个子句和'AND'分隔的WHERE选择器是很容易的-但是我写了下面的代码来做'WHERE'查询和'OR'分隔每个案例的等效 有人能提出更好的建议吗?因为每次都觉得有点糟糕 var foo = new int[] { 0, 0, 1, 1, 2, 2, 3, 3 }; var bar = new int[] { 0, 2 }; var hum = new List<int>(); foreach (int i in bar)

我发现使用Linq,用多个子句和'AND'分隔的WHERE选择器是很容易的-但是我写了下面的代码来做'WHERE'查询和'OR'分隔每个案例的等效

有人能提出更好的建议吗?因为每次都觉得有点糟糕

    var foo = new int[] { 0, 0, 1, 1, 2, 2, 3, 3 };
    var bar = new int[] { 0, 2 };

    var hum = new List<int>();

    foreach (int i in bar)
        hum.AddRange(foo.Where(a => a == i));
var foo=newint[]{0,0,1,1,2,2,3};
var bar=newint[]{0,2};
var hum=新列表();
foreach(单位:巴)
hum.AddRange(foo.Where(a=>a==i));

编辑:更改了AddRange的concat…

好吧,该代码甚至无法工作
Concat
不修改调用它的序列-它返回一个新序列,该序列是其他两个序列的串联

在这种情况下,我认为您需要:

var values = foo.Where(x => bar.Contains(x));
当然,这是特定于这种情况的——LINQ中没有“一般”或子句。

使用以下命令:

var hum = bar.Select(x => foo.Where(y => y == x)).SelectMany(z => z).ToList();

很抱歉,我不能只做Contains(),因为有多个foo集合的实例在不同的阶段被过滤。@maxp:不清楚您的评论是什么意思,也不清楚您在寻找什么。除非你清楚自己的要求,否则很难给你一个有帮助的答案。为什么不使用方法组转换:
foo.Where(bar.Contains)
?@Ani:我不得不承认,我甚至没有想过使用方法组转换。老实说,我发现lambda表达式更容易一眼就能看懂,但是方法组转换仍然是一个很好的选择。不要把注意力集中在“我该怎么做”或“我想做什么”上。在这种情况下,“给我所有来自foo的号码,如果号码也在酒吧里”会让你很快找到Jon发布的答案。然而,由于这是特定于您发布的代码段的,您想做什么?好奇的是,您想做什么:1。设置一组where子句2。查看集合是否与任何试图获得问题句柄的子句匹配