2010-06-20 8 views
5

कॉलम चर द्वारा ऑर्डर कैसे करें क्योंकि मेरे पास पृष्ठ पर एक ड्रॉपडाउन है और मैं इस ड्रॉपडाउन जैसे मूल्य, कोड, रेटिंग, विवरण में चयनित सॉर्ड ऑर्डर के अनुसार ग्रिड दिखाना चाहता हूं इत्यादि आदि। और मैं प्रत्येक कॉलम के लिए एक अलग क्वेरी लिखना नहीं चाहता हूं।लिंक क्वेरी में चर द्वारा क्रमबद्ध करने के लिए एक प्रश्न चाहते हैं

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

भी देखें: http://stackoverflow.com/questions/41244/dynamic-linq-orderby –

उत्तर

6

मान लें कि आप एसक्यूएल के माध्यम से सॉर्टिंग करना चाहते हैं तो आपको क्रमबद्ध कॉलम/प्रकार में पास करने की आवश्यकता होगी। क्वेरी टाल जाता है जब तक आप वास्तव में चयन करते हैं तो आप चरणों में क्वेरी का निर्माण कर सकते हैं और एक बार आप कर रहे हैं, ताकि जैसे कि यह निष्पादित करें:

// 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(); 

आप तो बस एक बुनियादी मिल एसक्यूएल के बाहर यह करने के लिए चाहते हैं परिणामस्वरूप कोई सॉर्टिंग नहीं है और उसके बाद आपको आवश्यक प्रकार के मानदंडों पर परिणाम आधार पर ऑर्डरबी लागू करें।

+0

से ऑर्डरडेटा घोषित कर सकता हूं और क्या होगा यदि मेरे पास क्वेरी में कुछ शामिल हों ?? – Azhar

+0

@Azhar बस 'कहां' के बाद 'जॉइन' जोड़ें और बाकी सब कुछ एक ही काम करना चाहिए। 'जॉइन' बस दूसरे 'IQueryable' में शामिल हो जाएगा। – Kelsey

0

आप अलग-अलग चरणों में LINQ क्वेरी "बना सकते हैं"।

अपनी मूल क्वेरी जेनरेट की गई जानकारी को वापस करने के लिए उत्पन्न करें। यह क्वेरी तब तक निष्पादित नहीं की जाएगी जब तक कि आप परिणामों को आज़माएं और गणना न करें।

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

फिर अपने ईवेंट हैंडलर में, परिणामों को बाध्य करने से पहले जो भी सॉर्टिंग आप चाहते हैं उसे लागू करें।

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

// TODO: Display orderedData in a grid. 

पूर्ण क्वेरी जो आप अनुमानित करते हैं वह मूल्यांकन किया जाएगा। इसका मतलब है कि आप "आधार" क्वेरी से बने, अपनी ड्रॉप डाउन में प्रत्येक आइटम के लिए एक अलग क्वेरी चला सकते हैं।

+0

हाँ लेकिन इस में मैं बयान यदि एक से अधिक लिखने की ?? क्या मैं आदेश – 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; 
    } 

उपयोग:

  var query = lDC.tbl_Products.Where(p => p.TypeRef == pTypeId) 
            .OrderByIf(sortColumn == "Price", p => p.Price) 
            .OrderByIf(sortColumn == "Code", p => p.Code); 
संबंधित मुद्दे