Czy mimo to ten kod może zostać refaktoryzowany? Jedyną różnicą jest kolejność po części.Zapytanie LINQ wymaga albo rosnącej, albo malejącej w tym samym zapytaniu.
Idealy Chciałbym użyć wyrażenia delegat/lambda więc kod jest wielokrotnego użytku, ale nie wiem jak warunkowo dodać lub usunąć orderby operatorów zapytań i OrderByDescending
var linq = new NorthwindDataContext();
var query1 = linq.Customers
.Where(c => c.ContactName.StartsWith("a"))
.SelectMany(cus=>cus.Orders)
.OrderBy(ord => ord.OrderDate)
.Select(ord => ord.CustomerID);
var query2 = linq.Customers
.Where(c => c.ContactName.StartsWith("a"))
.SelectMany(cus => cus.Orders)
.OrderByDescending(ord => ord.OrderDate)
.Select(ord => ord.CustomerID);
Fajnie. Dzięki Jon. –
Wyłączyć temat, ale czy powyższe tłumaczenie zostanie poprawnie przetłumaczone na Linq2SQL? IOW jest na tyle sprytny, aby zobaczyć "nieobsługiwaną" metodę i wykonać ją przed zbudowaniem drzewa składni i wygenerowaniem kodu SQL? Zastanawiam się, nigdy tego nie próbowałem. :) – leppie
@leppie: To po prostu wywołanie istniejących metod Queryable - to one budują drzewo wyrażeń. Zauważ, że to * nie * będzie działało przeciwko 'IEnumerable' w tej chwili, chociaż możesz łatwo napisać równoważne metody rozszerzania, które by. –