2011-01-28 8 views
5

से अनुमानित नहीं किया जा सकता है, मैं एक एमवीसी ऐप में jqGrid जोड़ने के लिए इस link से डेमो का पालन करने का प्रयास कर रहा हूं।विधि सिस्टम के लिए प्रकार तर्क। Linq.Enumerable.OrderBy उपयोग

मेरे पास ऐसी कंपनियों का नाम है जो मैं ग्रिड में प्रदर्शित करने की कोशिश कर रहा हूं। एक कंपनी में बस एक आईडी और एक नाम होता है।

मैं अपने नियंत्रक समारोह में किसी त्रुटि में चल रहा हूँ:

विधि के लिए प्रकार तर्क:

public JsonResult DynamicGridData(string sortIndex, string sortOrder, int page, int rows) 
{ 
    int pageIndex = Convert.ToInt32(page) - 1; 
    int pageSize = rows; 

    var companies = companiesRepository.Companies.OrderBy(sortIndex + " " + sortOrder).Skip(pageIndex * pageSize).Take(pageSize); 
    //Error here 

    ... 
} 

मैं लाइन है कि OrderBy() बुला रहा है पर एक त्रुटि हो रही है 'System.Linq.Enumerable.OrderBy (System.Collections.Generic.IEnumerable, System.Func)' उपयोग से अनुमानित नहीं किया जा सकता है। प्रकार तर्कों को स्पष्ट रूप से निर्दिष्ट करने का प्रयास करें।

मुझे वास्तव में कोई जानकारी नहीं है कि त्रुटि का क्या अर्थ है, और मुझे कोई स्पष्टीकरण नहीं मिला है। मुझे यकीन नहीं है कि इस त्रुटि को सरल ऑर्डरब्य फ़ंक्शन पर क्या कारण है।

उत्तर

9

आप OrderBy एक स्ट्रिंग नहीं कर सकते हैं; आपको लैम्ब्डा अभिव्यक्ति या प्रतिनिधि को पास करने की आवश्यकता है।

आपको ट्यूटोरियल में उल्लिखित Dynamic LINQ का उपयोग करने की आवश्यकता है।

+0

आप कैसे मैं यहां कर सकते हैं का एक उदाहरण है? – Steven

+0

आपको बस लाइब्रेरी और नेमस्पेस को शामिल करने की आवश्यकता है। – SLaks

+0

मैं गतिशील LINQ का उपयोग करने की कोशिश कर रहा हूं। समस्या यह है कि मैं उस संपत्ति को नहीं जानता जिसे मैं सॉर्ट कर रहा हूं। मैं इसे एक स्ट्रिंग के रूप में पास कर रहा हूँ। मैं स्ट्रिंग को लैम्ब्डा अभिव्यक्ति में कैसे परिवर्तित कर सकता हूं? – Steven

6

यदि आपने जिस विधि को कॉल कर रहे हैं उसके लिए प्रलेखन से परामर्श लिया है (Enumerable.OrderBy), तो आप जानते होंगे कि पैरामीटर Func<TSource, TKey> है और स्ट्रिंग नहीं है। विधि के लिए

प्रकार तर्क 'System.Linq.Enumerable.OrderBy (System.Collections.Generic.IEnumerable, System.Func) के उपयोग से नहीं लगाया जा सकता। प्रकार तर्कों को स्पष्ट रूप से निर्दिष्ट करने का प्रयास करें।

कंपाइलर ने यह पता लगाने का प्रयास किया कि स्ट्रिंग पैरामीटर वास्तव में एक Func कैसे था और फिर फैसला किया कि यह निर्धारित नहीं कर सकता कि टीएसओएस क्या है और टीके क्या है। यह कॉल में उन प्रकार को निर्दिष्ट करके मदद करने के लिए आप पूछ रहा है इस तरह:

companiesRepository.Companies.OrderBy<Company, int>(sortIndex + " " + sortOrder) 

अगर आप ऐसा करेंगे कि, तो संकलक बजाय, आपको बताएगा कि स्ट्रिंग एक सही पैरामीटर नहीं है, क्योंकि अब यह काफी है यह जानने के लिए जानकारी।

+0

जो कि संकलित नहीं करेगा। यह एक प्रतिनिधि नहीं है, एक स्ट्रिंग नहीं। – SLaks

+3

हां, मैंने यही कहा। मैं उसे सिखाने की कोशिश नहीं कर रहा हूं कि वह क्या कर रहा है, मैं बस यह समझाने की कोशिश कर रहा हूं कि संकलक क्या कह रहा है। –

12

इस सवाल का विशिष्ट जवाब आप

using System.Linq.Dynamic; 

जोड़ने की जरूरत है और आप अपनी परियोजना में Dynamic.DLL के लिए एक संदर्भ जोड़ने की जरूरत है।

3

मुझे पता है कि यह मेरे हिस्से से एक स्कूल-लड़का त्रुटि है, लेकिन मुझे यह त्रुटि मिली "CS0411 विधि के लिए प्रकार तर्क 'एन्यूमेरेबल.ऑर्डर बी (आईनेमेरेबल, फनक)' को उपयोग से अनुमानित नहीं किया जा सकता है। निर्दिष्ट करने का प्रयास करें स्पष्ट रूप से तर्क टाइप करें। "।

यह "संपत्ति" को हल करता है जो मैं सॉर्ट कर रहा था, वास्तव में एक समारोह था, और मैंने "()" छोड़ा था। यह मुझे खोजने के लिए एजीईएस लिया!

मेरी कोड exerpt में:

return _numbers.Values.OrderBy(x => x.TotalScore); 

किया जाना चाहिए था
return _numbers.Values.OrderBy(x => x.TotalScore()); 

बस सोचा था कि मैं यह उल्लेख होगा ......

1
  1. के संदर्भ System.Linq.Dynamic.dll जोड़े अपने परियोजना।
  2. फिर, नाम स्थान जोड़ें: using System.Linq.Dynamic;
+0

.NET कोर या ef कोर में मौजूद नहीं है। कोई विकल्प? –

संबंधित मुद्दे