Как мне сделать синтаксис IN с Linq - PullRequest
7 голосов
/ 05 января 2011

Мне нужно сделать это с помощью синтаксиса цепочки 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 ]

8 голосов
/ 05 января 2011

Вы можете использовать простой Contains.

var a = Members.Where(x => arr.Contains(x.City));
3 голосов
/ 20 ноября 2011

Я знаю, что это старо, но я думал, что это поможет новым читателям этого поста.

Аналогично code4life , я использую метод расширения. Разница, однако, в том, что я использую дженерики, поэтому они будут работать с несколькими типами.

Вы можете прочитать мое сообщение в блоге , чтобы увидеть больше информации о том, как это сделать, но основная идея такова:

Добавив этот метод расширения в ваш код:

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). Любой тип значения точно.

0 голосов
/ 05 января 2011

Статические расширения хорошо работают с вашими потребностями 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);
...