2010-09-27 17 views
7

मैं आरोही प्रारूप में अपने आइटम सॉर्ट करने के लिए IEnumerable orderby उपयोग कर रहा हूँ, लेकिन यह मेरी क्वेरी काम नहीं करता है इस तरह है:IEnumerable OrderBy

IEnumerable<Step> steps = allsteps.Where(step => step.X <= Y); 

steps = steps.OrderBy(step => step.X); 

अपने OrderBy का उपयोग करने के डेफर नहीं या OrderByDescending

क्यों?

मैं कुछ आइटम योग करने के लिए Sum() विधि का उपयोग करना चाहते हैं और आइटम के आदेश महत्वपूर्ण है (वहाँ कुछ नियम हैं)

मैं MSDN में पढ़ा है कि काम करने के लिए प्रगणित किया जाना चाहिए, लेकिन क्या अच्छा तरीका है (मैं नहीं था कोशिश करो)।

संपादित करें: X और Ydouble प्रकार के हैं। मैंने त्वरित चरणों में अपने चरणों (चरणों। सबसे पहले)) की पहली आइटम की जांच की।

+2

एक्स का प्रकार क्या है? –

+1

आप परिणाम की जांच कैसे करते हैं? –

+1

जैसा कि आप केवल पहले तत्व की जांच करते हैं ... क्या आप वाकई 'चरणों' में सभी तत्वों का एक ही एक्स मान नहीं रखते हैं? – digEmAll

उत्तर

8

सबसे पहले, क्यों न केवल इसे एक पंक्ति पर रखें।

var steps = allsteps.Where(step => step.X <= Y).OrderBy(step => step.X); 

"vc 74" के रूप में, उसकी टिप्पणी में बताया, तो X आदिम नहीं है या लागू नहीं करता है IComparable या IComparable<TypeOfX> तो आप अपनी सूची का आदेश देने के साथ या LINQ के बिना सक्षम होने के लिए नहीं जा रहे हैं ।

3

यह सिर्फ उम्मीद के रूप में काम करता है:

// Create some random double values from 0 - 100 
var values = Enumerable.Repeat(new Random(), int.MaxValue) 
         .Select(r => r.NextDouble() * 100); 

//Create an enumeration with ten elements 
var pointList = values.Take(10) 
         //Cause of lacking support of IEnumerable.Zip() or .Pairwise() 
         //use this approach to create something with the properties X and Y 
         .Select(n => new PointF((float)n, (float)values.First())); 

//Sort the elements 
var sortedPoints = pointList.OrderBy(point => point.X); 

//Output to console 
foreach (var point in sortedPoints) 
{ 
    Console.WriteLine(point.ToString()); 
} 
3

इस के साथ एक बहुत ही इसी तरह की समस्या का सामना किया:

IEnumerable<Article> articles = StepThree.ReturnArticles(iUserID); 
lvPending.DataSource = articles; 
lvPending.DataBind(); 

आदेश परिणाम तो मेरे सूचीदृश्य करने के लिए बाध्य होगा बदलने के लिए चाहता था, इसलिए मैंने कोशिश की यह:

lvPending.DataSource = articles.OrderByDescending(a=> a.DateCreated); 

यह निष्पादित हुआ, लेकिन मेरे परिणामों को अपडेट नहीं किया। तो आगे देखकर मैंने पाया कि चूंकि मैं एक जटिल प्रकार का लौट रहा हूं linq इसे मेरे लिए ऑर्डर नहीं कर सकता है, इसलिए मुझे StepThree.cs फ़ाइल में ऑर्डर करने वाले ऑर्डर को जोड़ना पड़ा जहां विधि ReturnArticles को कॉल किया गया था।

+0

हाय डेविड के लिए खेद है, यह सवाल तब था जब मैं linq में नया था :) यह आसान गलती थी और यह ठीक काम करता है, लेकिन मैं इसे (उस समय) नहीं देख सका। –

+0

@ सईदएमीरी: चूंकि आपने अपनी समस्या हल की है, इसलिए इस पोस्ट में अन्य लोगों के लिए अपना समाधान पोस्ट करना अच्छा अभ्यास है। –

+0

@ मैथ्यू, आप इस सवाल पर टिप्पणियां देख सकते थे, असल में कोई समस्या नहीं थी, सूची में एक तत्व है। मैंने सवाल नहीं हटाया क्योंकि कुछ जवाबों में वृद्धि हुई है और उन्होंने समस्या को हल करने की कोशिश की है। –