2011-01-04 3 views
6

Potrzebuję zrobić to używając składni linq łańcuchów. Mam:Jak zrobić składnię IN z 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) 

Odpowiedz

7

Możesz użyć prostego Contains.

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

Gdybym musiał użyć składni JOIN lub składni IN, jak miałbym to zrobić (chociaż twoja odpowiedź działa jak czar) – DotnetDude

+0

@Dotnet, co masz na myśli? "DOŁĄCZ lub IN" - To bardzo różne rzeczy. – jjnguy

+0

Czy masz na myśli "IN" jako kryterium "DOŁĄCZ"? – n8wrl

0

rozszerzenia statyczne działają dobrze z LINQ potrzebuje:

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

A teraz oryginalny kod może być zmieniony tak:

// 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); 
3

wiem, że to jest stary, ale myślałem, to pomogłoby nowym czytelnikom tego posta.

Podobny do code4life, używam metody przedłużenia. Różnica polega jednak na tym, że używam generycznych, więc będzie działać z wieloma typami.

Możesz przeczytać mój blog post aby zobaczyć więcej informacji o tym, jak to zrobić, ale główna idea jest taka:

Dodając tę ​​metodę rozszerzenia do kodu:

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

możesz wykonywać szukaj tak:

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

Działa na każdym typie (o ile tworzy się dobrą metodę równości). Dowolny typ wartości na pewno.