2010-01-06 13 views
5

मैं SQL के और Linq गतिशील OrderBy Linq उपयोग कर रहा हूँ।Linq करने के लिए Sql - गतिशील OrderBy - प्रकरण जब

मैं जानता हूँ कि LINQ गतिशील की तरह साधारण छंटाई कर सकते हैं - orderby ("COLUMN_NAME")।

लेकिन क्या यह उनसे "केस कब" के साथ प्रश्नों की तरह कुछ जटिल जटिलता का समर्थन करता है?

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

ऊपर के उदाहरण काम नहीं करता:

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

यहाँ मेरी क्वेरी है! , अगर यह संभव है तो कोई विचार? इसे करने का कोई और तरीका है?

धन्यवाद

उत्तर

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

मुझे गतिशील क्वेरी का उपयोग करना है क्योंकि मेरे पास एक int [] realUsers = 100, 22, 77, 12, आदि है ... मैं उस int [] के आधार पर उपयोगकर्ता तालिका को सॉर्ट करना चाहता हूं, जिसका अर्थ है उपयोगकर्ताओं को दिखाएं पहले "realUsers" में। – dan

+1

आप उस u.username == 100 को प्रतिस्थापित कर सकते हैं? 1: 0 (लगभग) किसी भी तर्क आप आदेश देने के लिए चाहते हैं, आप अनिवार्य रूप से बस इसे Sql के बजाय सी # में लिख रहे हैं के साथ। यह जानने के बिना कि आप ऑर्डर करने का प्रयास कैसे कर रहे हैं, अपने मूल कोड को बदलने से बेहतर उदाहरण देना मुश्किल है ... –

1

यह वास्तव में मेरे लिए काम करता है:

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

आशा इस मदद करता है!

0

ऐसा लगता है कि आप एक गतिशील LINQ क्वेरी में CASE उपयोग नहीं कर सकते।

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

गतिशील LINQ अभिव्यक्ति के तरीकों और कीवर्ड की Overview: लेकिन आप iif-keyword उपयोग कर सकते हैं।

संबंधित मुद्दे