Cześć
Moim celem jest wyciągnąć z bazy dane, które spełniają warunek, którego wartości zawarte są w liście.
Np. mam jakąś listę IDs, która zawiera jakieś wartości { 1, 5, 9, 10 } i teraz chciałbym za pomocą Linq wyciągnąć elementy z bazy, których pewne pole jest równe jednej z wartości listy IDs.
Czy można osiągnąć taki efekt przy użyciu tylko jednego zapytania operując na kolekcji IQueryable?
baza.Where(x => listaIDs.Contains(x.PewnePole))
W tytule LINQ, w tagach ASP.NET, a w pytaniu tak naprawdę chodzi o Entity Framework.
To trochę tak, jakby iść do warsztatu i powiedzieć, że samochód jest przechylony na prawo, a tak faktycznie, to podłoga w garażu krzywa.
mad_penguin napisał(a):
baza.Where(x => listaIDs.Contains(x.PewnePole))
Nie wiem czy dobrze mnie zrozumiałeś, więc posłużę się przykładem. Mam w bazie jakieś produkty, które mają właściwość opisującą producenta. W wyszukiwarce produktów ustawiam sobie kilku producentów, których produkty chcę pokazać.
Dla zobrazowania problemu przedstawiam kod, w którym wyszukuje produkty tylko jednego producenta.
public IEnumerable<Product> GetProducts(int manufacutrerId)
{
IQueryable<Product> products = context.Products.AsQueryable();
if (manufacutrerId != 0)
products = products.Where(p => p.Manufacturer.Id == manufacutrerId);
return products;
}
Teraz zamiast int-a w argumencie, chciałbym przekazać całą tablice bądź listę.
somekind napisał(a):
W tytule LINQ, w tagach ASP.NET, a w pytaniu tak naprawdę chodzi o Entity Framework.
To trochę tak, jakby iść do warsztatu i powiedzieć, że samochód jest przechylony na prawo, a tak faktycznie, to podłoga w garażu krzywa.
Może i masz rację. Popełnianie błędów jest częścią procesów nauki :)
coś w ten deseń
public IEnumerable<Product> GetProducts(IEnumerable<int> manufacturerIds)
{
IQueryable<Product> products = context.Products.AsQueryable()
.Where(p => manufacturerIds.Contains(p.Manfucaturer.Id));
}
Dzięki, @john_klamka. Teraz przejrzałem na oczy, że odpowiedź @mad_penguin także była jak najbardziej trafna. Dzięki Wam!