2010-06-20 13 views
5

Jak wykonać zamówienie według zmiennej Kolumna, ponieważ mam listę rozwijaną na stronie i chcę wyświetlać tabelę zgodnie z kolejnością sordów wybraną w tym menu, np. Cena, kod, ocena, opis itp. itd. i nie chcę napisać osobnego zapytania dla każdej kolumny.chcesz, aby zapytanie składało zamówienie przez zmienną w zapytaniu Linq

from lm in lDc.tbl_Products 
where lm.TypeRef == pTypeId 
orderby lm.Code ascending 
select new; 
+0

Patrz także: http://stackoverflow.com/questions/41244/dynamic-linq-orderby –

Odpowiedz

6

Zakładając, że chcesz wykonać sortowanie za pomocą SQL, musisz podać kolumnę/typ sortowania. Zapytanie jest odroczone do czasu rzeczywiście zrobić select, dzięki czemu można tworzyć kwerendy w krokach po zakończeniu wykonać ją tak:

// Do you query first. This will NOT execute in SQL yet. 
var query = lDC.tbl_Products.Where(p => p.TypeRef == pTypeId); 

// Now add on the sort that you require... you could do ascending, descending, 
// different cols etc.. 
switch (sortColumn) 
{ 
    case "Price": 
     query = query.OrderBy(q => q.Price); 
     break; 
    case "Code": 
     query = query.OrderBy(q => q.Code); 
     break; 
    // etc... 
} 

// Now execute the query to get a result 
var result = query.ToList(); 

Jeśli chcesz to zrobić poza SQL następnie po prostu podstawowy wynik bez sortowania, a następnie zastosuj OrderBy do podstawy wyniku według potrzebnych kryteriów sortowania.

+0

i co jeśli mam również dołączyć do zapytania? – Azhar

+0

@Azhar po prostu dodaj "Dołącz" po "Gdzie", a wszystko inne powinno działać tak samo. 'Join' połączy się z innym' IQueryable'. – Kelsey

0

Możesz "zbudować" zapytanie LINQ w oddzielnych krokach.

Wygeneruj zapytanie podstawowe, aby zwrócić nieposortowane informacje. To zapytanie nie zostanie wykonane, dopóki nie spróbujesz wyliczyć wyników.

var data = from lm in lDc.tbl_Products 
      where lm.TypeRef == pTypeId 
      select new; 

Następnie w programie obsługi zdarzeń zastosuj dowolne sortowanie przed powiązaniem wyników z siatką.

var orderedData = from lm in data 
        order lm.Code ascending 
        select new; 

// TODO: Display orderedData in a grid. 

Pełne wyliczenie to to, które zostanie ocenione. Oznacza to, że możesz uruchomić osobne zapytanie dla każdego elementu w rozwijanym menu, zbudowane z "podstawowego" zapytania.

+0

tak ale to muszę napisać wielokrotny if ?? mogę zadeklarować zamówione dane z jeśli instrukcja – Azhar

3
public static IEnumerable<T> OrderByIf<T,TKey>(this IEnumerable<T> source, bool condition, Func<T, TKey> keySelector) 
    { 
     return (condition) ? source.OrderBy(keySelector).AsEnumerable() : source; 
    } 

Zastosowanie:

  var query = lDC.tbl_Products.Where(p => p.TypeRef == pTypeId) 
            .OrderByIf(sortColumn == "Price", p => p.Price) 
            .OrderByIf(sortColumn == "Code", p => p.Code); 
Powiązane problemy