2011-11-30 19 views
5

मेरे पास ग्राहक नाम और आयु कॉलम वाली दो कॉलम तालिका है। मेरे पास डेटाटेबल में सभी डेटा है। मैं इसे अवरोही उम्र से क्रमबद्ध करना चाहता हूं और फिर प्रत्येक आयु समूह को नाम से क्रमबद्ध किया जाता है। इसलिए सभी लोगों को 30 वर्ष की आयु के alpabetically छाँटे गए और 29 और 31 आदिसी # सॉर्ट टेबल 2 कॉलम

आयु वर्ग के लोगों की सूचियों के बीच हो रहा है किया जाएगा:

string selectStatement = "Age"; 
string sortStatement = "Age DESC" 

var rows = table.Select(selectStatement, sortStatement); 

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

फ़िल्टर अभिव्यक्ति 'आयु' एक बूलियन अवधि का मूल्यांकन नहीं करती है।

उत्तर

3

तरह @adrift कहा हो सकता है। आपको पहली अभिव्यक्ति के रूप में एक फ़िल्टर अभिव्यक्ति (जो बुलियन का मूल्यांकन करती है) भेजनी चाहिए। वहां शून्य और खाली स्ट्रिंग भेजने का प्रयास करें, शायद चयन तर्क को अनदेखा कर देगा। या इसेजैसे कुछ छोटी अभिव्यक्ति दें 1. और फिर भाग के क्रम में, आप अल्पविराम से कई फ़ील्ड अलग कर सकते हैं: "आयु Desc, नाम"।

लेकिन इससे भी बेहतर, आपको डेटाव्यू क्लास का उपयोग करना चाहिए। इस तरह:

var dt = new DataTable(); // your data. 
var view = new DataView(dt); 
view.Sort = "Age desc, Name asc"; 

फिर आप इस वर्ग को कुछ नियंत्रणों के लिए डेटासोर्स के रूप में सेट कर सकते हैं, आदि यह पंक्तियों को सही क्रम में वापस कर देगा। या आप पंक्तियों पर फिर से चलाने के लिए फोरैच का उपयोग कर सकते हैं।

foreach (DataRowView dr in view) 
{ 
    //do what you like 
} 
1

Select पर पहला तर्क फ़िल्टर अभिव्यक्ति होना चाहिए, न कि चयन करने के लिए कॉलम की सूची।

0

ऐसा इसलिए है क्योंकि DataTable.Select विधि फ़िल्टरिंग के लिए है और आपका चयन कथन SQL चयन की तरह नहीं है।

इस प्रयास करें:

table.DefaultView.Sort = "Age DESC"; 
0

आपका selectStatementफिल्टर अभिव्यक्ति शामिल होना चाहिए। this पर एक नज़र डालें।

तो, अपने selectExpression

string selectStatement = "Age > 0"; //if all people required 
1

चयन और सॉर्टिंग दो अलग-अलग चीजें हैं।

आप linq to dataset इस्तेमाल कर सकते हैं:

var rows = table.AsEnumerable().OrderByDescending(row => row.Field<int>("Age")). 
           ThenBy(row => row.Field<string>("Name")); 
0

फिल्टर आर्ग अशक्त के रूप में पारित किया जा सकता है ताकि कोई भी फ़िल्टर को भरने लागू किया जा, और प्रकार में आप तरह दिशा निर्धारित किए बिना के रूप में कई कॉलम आप के साथ/चाहते डाल सकते हैं (डिफ़ॉल्ट आरोही है)। मेरे अनुभव से, बड़े DataTables पर चयन LINQ दृष्टिकोण से तेज़ हो जाता है।

0

डेटाव्यू ओडाटासेट; oDataSet.Tables [0] .efaultView.Sort = "कॉलम 1 एएससी";

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