2009-11-20 12 views
8

मेरे आवेदन में मेरे पास आइटम की एक सूची है जो मुझे मूल्य से क्रमबद्ध करने और प्रत्येक आइटम के लिए रैंक/स्थिति सूचकांक सेट करने की आवश्यकता है। मुझे रैंक को स्टोर करने की ज़रूरत है क्योंकि कीमत बाद में बदल सकती है। फिलहाल मैं इसे इस तरह कर रहा हूं:लिंक-क्वेरी के साथ मूल्य सेट करें?

var sortedlistKFZ = from res in listKFZ orderby res.Price select res; 
if (sortedlistKFZ.Any()) 
{ 
    int rankPosition = 1; 
    foreach (Result kfz in sortedlistKFZ) 
    { 
      kfz.MesaAdvertNumber = rankPosition; 
      rankPosition++; 
    } 
} 

क्या ऐसा करने का एक छोटा रास्ता है?

उत्तर

9

क्या यह काम हो सकता है?

int rankPosition = 1; 
var sortedListKFZ = listKFZ.OrderBy(r => r.Price).Select(r => { 
    r.MesaAdvertNumber = ++rankPosition; 
    return r; 
}); 
+2

यह एक छोटा सा विस्तार के लिए छोड़कर ... नंबर 2. से शुरू कर देंगे होगा आप के लिए 0. –

+0

घ पोस्टफ़िक्स (rankPosition ++) या rankPosition का प्रारंभिक मूल्य के लिए परिवर्तन वेतन वृद्धि की जरूरत है ' ओह। यह बिल्कुल सही है –

1

सरलतम एक

(from res in listKFZ orderby res.Price select res).ToList().ForEach(...) 
बेशक आप IEnumerable के लिए अपने स्वयं के foreach विस्तार लिख सकते हैं के

होगा, लेकिन मुझे याद है मैं इसके साथ पक्ष प्रभाव नहीं पड़ा। सूची पर काम करना बेहतर है।

3

आप इसे let कीवर्ड का उपयोग करके कर सकते हैं। यह काम करना चाहिए ...

Int32[] numbers = new Int32[] { 3, 6, 4, 7, 2, 8, 9, 1, 2, 9, 4 }; 

int count = 1; 
var ranked = 
    from n in numbers 
    let x = count++ 
    select new { 
     Rank = x, 
     Number = n 
    }; 
संबंधित मुद्दे