2008-08-01 5 views
80

मेरे पास है Name कॉलम के साथ। मैं वर्णानुक्रमित क्रमशः अद्वितीय नामों का संग्रह उत्पन्न करना चाहता हूं। निम्न क्वेरी ऑर्डर खंड से अनदेखा करती है।LINQ का उपयोग कर डेटाटेबल से नामों की एक अलग, आदेशित सूची कैसे प्राप्त करूं?

var names = 
    (from DataRow dr in dataTable.Rows 
    orderby (string)dr["Name"] 
    select (string)dr["Name"]).Distinct(); 

orderby क्यों लागू नहीं किया जाता है?

उत्तर

29

इसे और अधिक पठनीय और रखरखाव करने के लिए, आप इसे कई LINQ कथनों में भी विभाजित कर सकते हैं।

  1. सबसे पहले, आप
  2. अंत में की आवश्यकता होती है जो कुछ भी भेद उपयोग कर नई सूची में अपने डेटा का चयन करें, यह x1 कॉल, एक प्रक्षेपण अगर वांछित
  3. इसके बाद, एक अलग सूची बनाते हैं, x1 से x2 में करते हैं, , द्वारा छँटाई आप जो भी इच्छा
50

समस्या यह है कि अलग ऑपरेटर प्रदान नहीं करता है कि यह मूल्यों की मूल व्यवस्था बनाए रखने जाएगा।

तो आपकी क्वेरी इस

var names = (from DataRow dr in dataTable.Rows 
      select (string)dr["Name"]).Distinct().OrderBy(name => name); 
1

की तरह काम करने की कोशिश निम्नलिखित

var names = (from dr in dataTable.Rows 
      select (string)dr["Name"]).Distinct().OrderBy(name => name); 

इस तुम क्या जरूरत है के लिए काम करना चाहिए की आवश्यकता होगी।

7
var sortedTable = (from results in resultTable.AsEnumerable() 
select (string)results[attributeList]).Distinct().OrderBy(name => name); 
3

के लिए बाहर की कोशिश करो x2 से में, एक आदेश दिया सूची बनाते हैं, llowing:

dataTable.Rows.Cast<DataRow>().select(dr => dr["Name"].ToString()).Distinct().OrderBy(name => name); 
0

अमूर्त करने के लिए: सभी उत्तरों में कुछ सामान्य है।

ऑर्डरबी को अंतिम ऑपरेशन होने की आवश्यकता है।

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