मैं LINQ का उपयोग करके डेटाटेबल से अलग, ऑर्डर की गई सूची कैसे प्राप्त कर सकता हूं?


104

मैं एक है DataTableएक साथ Nameस्तंभ। मैं वर्णानुक्रम में आदेशित अद्वितीय नामों का एक संग्रह उत्पन्न करना चाहता हूं। निम्न क्वेरी खंड द्वारा आदेश की अनदेखी करती है ।

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

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

जवाबों:


37

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

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

55

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

तो आपकी क्वेरी को इस तरह काम करने की आवश्यकता होगी

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



3

निम्नलिखित का प्रयास करें

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

आपको जो चाहिए उसके लिए यह काम करना चाहिए।


2

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

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


2

आप कुछ इस तरह का उपयोग कर सकते हैं:

dataTable.Rows.Cast<DataRow>().GroupBy(g => g["Name"]).Select(s => s.First()).OrderBy(o => o["Name"]);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.