我如何使用Linq进行IN语法

时间:2011-01-04 21:48:18

标签: c# linq linq-to-objects

我需要使用linq链接语法来执行此操作。我有:

string[] arr = new string[] {"Chicago", "NewYork"};

var a = Members.Where(x => x.City == <here I want to get all members in chicago or newyork)

3 个答案:

答案 0 :(得分:8)

您可以使用简单的Contains

var a = Members.Where(x => arr.Contains(x.City));

答案 1 :(得分:3)

我知道这已经过时了,但我认为这会对这篇文章的新读者有所帮助。

code4life类似,我使用扩展方法。不过,不同之处在于我使用泛型,因此可以使用多种类型。

您可以阅读我的blog post以查看有关如何执行此操作的详细信息,但主要想法是:

将此扩展方法添加到您的代码中:

public static bool IsIn<T>(this T source, params T[] values)
{
    return values.Contains(source);
}

您可以像这样执行搜索:

var a = Members.Where(x => x.City.IsIn("Chicago", "NewYork");

它适用于任何类型(只要你创建一个好的equals方法)。任何值类型肯定。

答案 2 :(得分:0)

静态扩展可以很好地满足您的LINQ需求:

// add this class to your project...
public static class StringExtensions
{
    public static bool IsIn(this string target, params string[] testValues)
    {
        return testValues.Contains(target);
    }
}

现在您的原始代码可以像这样更改:

// quick and dirty code:
var a = Members.Where(x => x.City.IsIn("Chicago", "NewYork");

// less quick and dirty code:
string[] arr = new string[] {"Chicago", "NewYork"};    
var a = Members.Where(x => x.City.IsIn(arr);