मैं एक लिंक IQueryable <> गतिशील रूप से सॉर्ट करने के लिए कुछ कोड बनाने की कोशिश कर रहा हूं।मजबूत टाइप किए गए गतिशील लिंक सॉर्टिंग
स्पष्ट तरीका यहाँ है, जो क्षेत्र नाम के लिए एक स्ट्रिंग का उपयोग
http://dvanderboom.wordpress.com/2008/12/19/dynamically-composing-linq-orderby-clauses/
हालांकि मैं एक परिवर्तन चाहते हैं एक सूची सॉर्ट करता - फ़ील्ड नामों की जाँच समय संकलन, और पुनर्रचना के उपयोग करने की क्षमता/सभी का पता लगाएं बाद में रखरखाव का समर्थन करने के लिए संदर्भ। इसका मतलब है कि मैं फ़ील्ड को f => f.Name के रूप में परिभाषित करना चाहता हूं, स्ट्रिंग के बजाए।
मेरे विशिष्ट उपयोग के लिए मैं कुछ कोड को समाहित करना चाहता हूं जो तय करेगा कि "ऑर्डरबी" अभिव्यक्तियों की एक सूची का उपयोग उपयोगकर्ता इनपुट के आधार पर किया जाना चाहिए, हर बार अलग-अलग कोड लिखने के बिना।
var list = from m Movies select m; // Get our list
var sorter = list.GetSorter(...); // Pass in some global user settings object
sorter.AddSort("NAME", m=>m.Name);
sorter.AddSort("YEAR", m=>m.Year).ThenBy(m=>m.Year);
list = sorter.GetSortedList();
...
public class Sorter<TSource>
...
public static Sorter<TSource> GetSorter(this IQueryable<TSource> source, ...)
GetSortedList समारोह जो नामित तरह की उपयोग करने के लिए निर्धारित करता है, जो एक सूची वस्तु है, जहां प्रत्येक FieldData MethodInfo और प्रकार मान में परिणाम:
यहाँ मैं क्या लिखा है का सार है AddSort में पारित क्षेत्रों में:
public SorterItem<TSource> AddSort(Func<T, TKey> field)
{
MethodInfo ... = field.Method;
Type ... = TypeOf(TKey);
// Create item, add item to diction, add fields to item's List<>
// The item has the ThenBy method, which just adds another field to the List<>
}
मैं अगर वहाँ एक तरीका है कि इसे बाद में वापस कर दी अनुमति होगी में पूरे क्षेत्र वस्तु स्टोर करने के लिए एक रास्ता है यकीन नहीं है (यह कास्ट करने के लिए, यह बाद से असंभव हो जाएगा एक सामान्य प्रकार है)
वहाँ एक रास्ता मैं नमूना कोड अनुकूलन सकता है, या आदेश वे कुछ कंटेनर में संग्रहित किया गया है और पुनः प्राप्त करने के बाद जोरदार टाइप किया फ़ील्ड नाम का उपयोग कर सॉर्ट करने के लिए में पूरी तरह से नए कोड के साथ आते हैं, है (किसी भी सामान्य प्रकार कास्टिंग खोने)
पोस्ट देखें: (। यह अन्य जो चाहता है से "जादू" आदेश में मदद मिल सकती) http://stackoverflow.com/questions/41244/dynamic-linq-orderby – Nordes