मैं किसी अज्ञात ऑब्जेक्ट के साथ काम करने के लिए LINQ कथन में OrderBy
प्राप्त करने का प्रयास कर रहा हूं लेकिन अब तक विफल रहा है।LINQ आदेश प्रक्षेपण तुलनाकर्ता के साथ अज्ञात ऑब्जेक्ट
मैं इन पहले ही जाँच:
Anonymous IComparer implementation
C# linq sort - quick way of instantiating IComparer
How to sort an array of object by a specific field in C#?
मैं अलग दृष्टिकोण की कोशिश कर रहा में कुछ घंटे बिताए लेकिन वहाँ कुछ मैं याद कर रहा हूँ हो गया है।
के वहाँ निम्नलिखित वर्ग का कहना है कि दो:
public class Product
{
public int Id {get; set;}
public string Name {get; set;}
public int Popularity {get; set;}
public decimal Price {get; set;}
}
और products
इन वस्तुओं की एक सूची है।
मैं इस LINQ कथन को कैसे पूरा कर सकता हूं, ताकि यह अज्ञात ऑब्जेक्ट के साथ काम कर सके?
स्पष्ट होने के लिए, मुझे पता है कि मैं इसे एक अलग तरीके से कर सकता हूं लेकिन मुझे यह जानने में बहुत दिलचस्पी होगी कि यह विशेष उदाहरण कैसे काम करें।
var sortedProducts = products
.OrderBy(p =>
new {p.Popularity, p.Price},
[IComparer magic goes here]);
ऐसा लगता है कि यह ProjectionComparer
के एक कार्यान्वयन के साथ संभव हो जाना चाहिए:
http://code.google.com/p/edulinq/source/browse/src/Edulinq/ProjectionComparer.cs?r=0c583631b709679831c99df2646fc9adb781b2be
कोई भी विचार कैसे यह करने के लिए?
अद्यतन:
मैं इस पर एक त्वरित प्रदर्शन परीक्षण किया - गुमनाम comparer समाधान बनाम मानक orderby.thenby और ऐसा लगता है कि गुमनाम समाधान काफी धीमी है जो शायद है कि हम क्या वैसे भी उम्मीद हो सकता है।
numProd | Anon | chained orderby clauses
10 000 | 47 ms | 31 ms
100 000 | 468 ms | 234 ms
1 000 000| 5818 ms | 2387 ms
5 000 000| 29547 ms| 12105 ms
आपके ऑर्डरिंग मानदंड क्या हैं? क्या आप कह रहे हैं कि यह लोकप्रियता पहले होनी चाहिए, फिर कीमत से? लोकप्रियता पर ऑर्डरबी क्यों नहीं करें और फिर कीमत पर क्यों? –
@JamesMichaelHare - चलिए एक प्राथमिक कारक के रूप में उच्च लोकप्रियता कहते हैं, उदाहरण के लिए इससे कोई फर्क पड़ता है, तो द्वितीयक कारक के रूप में कम कीमत। संपादित करें: मुझे पता है कि मैं यह कर सकता हूं लेकिन मुझे आश्चर्य है कि अनाम वस्तु के साथ दृष्टिकोण बिल्कुल काम करेगा, और यदि ऐसा है, तो मैं बस यह नहीं समझ सकता कि कैसे। –
ऑर्डरबी() में किसी अज्ञात ऑब्जेक्ट का उपयोग क्यों करें? क्यों न केवल: 'products.OrderByDescending (p => p.Popularity) .henby (p => p.Price) ' –