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)
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)
Możesz użyć prostego Contains
.
var a = Members.Where(x => arr.Contains(x.City));
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);
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.
Gdybym musiał użyć składni JOIN lub składni IN, jak miałbym to zrobić (chociaż twoja odpowiedź działa jak czar) – DotnetDude
@Dotnet, co masz na myśli? "DOŁĄCZ lub IN" - To bardzo różne rzeczy. – jjnguy
Czy masz na myśli "IN" jako kryterium "DOŁĄCZ"? – n8wrl