2010-01-06 23 views
5

Kullanıyorum Linq to sql ve Linq Dynamic OrderBy.Linq To Sql - Dynamic OrderBy - Durum

Biliyorum ki linq dynamic - orderby ("column_name") gibi basit bir sıralama yapabilir.

Ancak , "CASE WHEN" ile sorgular gibi daha karmaşık bir şeyi destekliyor mu?

var u = from u in db.users 
     orderby(orderbyQuery) 
     select u; 

Yukarıdaki örnek çalışmaz: Burada

string orderbyQuery = "(CASE WHEN (username == 100) THEN 1 ELSE 0 END) DESC)"; 

benim sorgu! Mümkün olan herhangi bir fikir? bunu yapmanın başka bir yolu var mı? Bu gerçekten benim için çalışıyor

sayesinde

cevap

10
var u = from u in db.users 
     orderby u.username == 100 ? 1 : 0 descending 
     select u; 
+0

bir int [] realUsers = 100, 22, 77, 12, vb. Var. Çünkü bu tabloyu kullanarak kullanıcılar tablosunu sıralamak istiyorum. önce "realUsers" olarak. – dan

+1

Bu u.username == 100 yerini alabilir mi? 1: 0 (neredeyse) sipariş vermek istediğiniz herhangi bir mantıkla, aslında sadece Sql yerine C# ile yazıyorsunuz. Tam olarak nasıl sipariş vermeye çalıştığınızı bilmeden, orijinal kodunuzu dönüştürmekten daha iyi bir örnek vermek zor… –

1

: Bu yardımcı olur

var queryResult = 
    from o in Source 
    orderby (o.ColumnThatSaysOrderByColumn1 ? o.Column1 : o.Column2) descending 
    select o 

Umut!

0

Dinamik bir LINQ sorgusunda CASE kullanamazsınız. Dinamik LINQ ifade yöntemleri ve anahtar kelimelerin

var query = db.users.OrderByDescending("iif(username = '100', 1, 0)"); 

Overview: Ama iif-keyword kullanabilirsiniz.