मैं LINQ के साथ SELECT UNIQUE कैसे कर सकता हूँ?


96

मेरे पास इस तरह की एक सूची है:

Red
Red
Brown
Yellow
Green
Green
Brown
Red
Orange

मैं LINQ के साथ एक SELECT UNIQUE करने की कोशिश कर रहा हूँ, अर्थात मैं चाहता हूँ

Red
Brown
Yellow
Green
Orange

var uniqueColors = from dbo in database.MainTable
                   where dbo.Property == true
                   select dbo.Color.Name;

मैंने फिर इसे बदल दिया

var uniqueColors = from dbo in database.MainTable
                   where dbo.Property == true
                   select dbo.Color.Name.Distinct();

कोई सफलता नहीं है। पहले selectको सभी रंग मिलते हैं, इसलिए मैं इसे केवल अद्वितीय मान प्राप्त करने के लिए कैसे संशोधित करूं?

यदि इस मार्ग को बनाने का एक बेहतर तरीका है, तो उस मार्ग पर जाने से अधिक खुशी होगी।

मैं इसे संपादित करने के बारे में कैसे जाऊं, इसलिए मेरे पास .OrderBy ("कॉलम नाम") हो सकता है अर्थात वर्णानुक्रम में रंग नाम से, इसलिए नाम संपत्ति?

मुझे एक संदेश मिलता रहा:

प्रकार तर्कों का उपयोग से अनुमान नहीं लगाया जा सकता है। स्पष्ट रूप से प्रकार के तर्क को निर्दिष्ट करने का प्रयास करें।

जवाबों:


159

डिस्टिंक्ट () ऑर्डर को गड़बड़ाने वाला है, इसलिए आपको उसके बाद छंटनी करनी होगी।

var uniqueColors = 
               (from dbo in database.MainTable 
                 where dbo.Property == true 
                 select dbo.Color.Name).Distinct().OrderBy(name=>name);

3
धन्यवाद, यह सही उत्तर है। क्या कोई बता सकता है कि क्या .OderBy () मापदंडों में जाता है। आपका नाम => नाम है। क्या वह नाम डीबी में कॉलम नाम से आ रहा है? क्योंकि हमारे पास dbo.Color.Nameतब है name=>nameजो मुझे संकेत देता है कि यह कॉलम नाम नहीं है? विचित्र यह भी ठीक तरह से अगर मैं सिर्फ करने के लिए बदल.OrderBy(a=>a)
बैरन

3
चर का नाम अप्रासंगिक है। यह सिर्फ {ऑब्जेक्ट फंक्शन में पास है} => {ऑब्जेक्ट सॉर्ट करने के लिए इस्तेमाल किया गया} है। चूंकि हमने पहले से ही सिलेक्ट कर लिया है, इसलिए संग्रह में एकमात्र चीज के नाम हैं।
जेम्स कुर्रान

धन्यवाद @JamesCurran, आपके समाधान ने मुझे बहुत मदद की।
रॉन

ऐसा लगता है कि अच्छा होगा यदि पूरे ऑब्जेक्ट / रिकॉर्ड द्वारा ऑर्डर करने के लिए एक ऑर्डरेडबी () हो। एक विस्तार विधि अभी भी किसी कारण के लिए एक प्रतिनिधि बुला रही होगी।
NetMage

@NetMage - स्पष्ट करें कि आपका क्या मतलब है "संपूर्ण वस्तु / रिकॉर्ड"। हर क्षेत्र में? किस क्रम में? प्राथमिक कुंजी सहित?
जेम्स कर्रान

20
var uniqueColors = (from dbo in database.MainTable 
                    where dbo.Property == true
                    select dbo.Color.Name).Distinct();

10

क्वेरी कॉम्प्रीहेंशन सिंटैक्स का उपयोग करके आप क्रम को निम्न प्रकार से प्राप्त कर सकते हैं:

var uniqueColors = (from dbo in database.MainTable
                    where dbo.Property
                    orderby dbo.Color.Name ascending
                    select dbo.Color.Name).Distinct();

हम्म ... कि किसी कारण के लिए एक वर्णनात्मक प्रकार हासिल नहीं किया ... मैं आरोही और अवरोही स्विच किया और एक ही परिणाम मिला। क्या अलग-अलग कथन इसे प्रभावित कर रहे हैं? शायद इसके बाद उसे ऑर्डर करने की आवश्यकता है?
बैरन

Var uniqueColors की कोशिश कर सकते हैं = डेटाबेस में (dbo से) में परिणाम से। मुख्य जहां dbo.Property का चयन dbo.Color.Name)। मूल () क्रम में परिणाम आरोही;
कॉर्डिएलगर्म
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.