2009-09-07 18 views
11

मैं सिस्टम.लिंक। डायनामिक का उपयोग कर कस्टम करने के लिए उपयोग कर रहा हूं जहां .NET MVC 1.0 में AJAX कॉल से क्लॉज हैं।सिस्टम .Linq.Dynamic और DateTime

यह तारों, int आदि के लिए ठीक काम करता है लेकिन डेटटाइम के लिए नहीं, मुझे अपवाद मिलता है कि स्ट्रिंग टू डेटटाइम की तुलना नहीं की जा सकती। बहुत ही सरल परीक्षण कोड

आइटम = आइटम। जहां (string.Format (@ "{0}> {1} {2} {1}", searchField, delimiter, searchString);

जहां खोज फ़ील्ड उदाहरण के लिए start_date होगी और डेटा प्रकार डेटटाइम है, डिलीमीटर "(कुछ भी नहीं के साथ प्रयास किया गया है) और सर्चस्ट्रिंग 01-जनवरी -2009 (01/01/2009 के साथ भी कोशिश की जाएगी) और आइटम LinqToSql से एक IQueryable है।

वहाँ एक गतिशील में डेटा प्रकार को निर्दिष्ट जहां का एक तरीका है, या वहाँ एक बेहतर तरीका है। यह वर्तमान में पहले से ही बाहर काम करने के सीमांकक किस प्रकार की आवश्यकता होती है कुछ प्रतिबिंब का उपयोग कर रहा है।

+1

जब किसी प्रश्न के उपरोक्त टन के साथ कोई जवाब होता है तो यह हमेशा मुझसे बाहर निकलता है, लेकिन सवाल के लिए 0 अपवॉट्स हैं। लंगड़ा। अच्छा सवाल, मैं यहाँ आया क्योंकि मुझे वही चीज़ चाहिए! आप के लिए अपवित्र, अच्छा महोदय! – viggity

उत्तर

18

मुझे लगता है कि आप सर्चस्ट्रिंग को डेटटाइम में परिवर्तित कर सकते हैं और इसे डायनामिक के पैरामीटर के रूप में पास कर सकते हैं जहां विधि स्वयं है।

itmes = items.Where(string.Format("{0} > @0", searchField), 
        DateTime.Parse(searchString)); 
+1

धन्यवाद आइटम = आइटम। जहां (string.Format ("{0}> @ 0", searchField), नया दिनांक समय (2001, 1, 15)); बहुत अच्छा काम किया –

+0

बहुत बढ़िया, धन्यवाद! –

1

क्या होगा यदि संपूर्ण लैम्ब्डा गतिशील रूप से बनाया जा रहा है (हम इसके मुकाबले बराबर के साथ बराबर होंगे) और प्रकार ज्ञात नहीं है? उस स्थिति में आप जहां पैरामीटर में डेटटाइम का उपयोग नहीं कर सकते हैं। यदि आप डेटटाइम ऑब्जेक्ट में पास करने का प्रयास करते हैं, तो डायनामिक LINQ इसे int32 प्रकार के रूप में व्याख्या करता है। क्या आप संभवतः डेटटाइम की टिक या मिलीसेकंड को परिवर्तित करके और इसकी तुलना करके इसे कर सकते हैं?

3

मैं, Convert.ToDateTime इस्तेमाल किया इस मुद्दे को हल करने के लिए आप सिर्फ Where([string]) प्रारूप के साथ ऐसा करना चाहते हैं के रूप में मैं कुछ इसी तरह कर रहा हूँ Kappasims

items = items.Where(string.Format("{0} > Convert.ToDateTime(\"{1}\")", searchField, searchValue); 
+4

मैंने इस सलाह को एक गुच्छा के आसपास देखा है, लेकिन यह मेरे लिए काम नहीं करता है - 'LINQ से Entities के साथ विफल रहता है' विधि को पहचान नहीं करता है। सिस्टम। डेटटाइम ToDateTime (System.String) ' –

+0

मुझे एक ही समस्या है उस सलाह के साथ। कौन सा एसक्यूएल सर्वर काम कर रहा है? –

3

, अन्य paramaters में गुजर नहीं, तो आप उपयोग कर सकते हैं दिनांक प्रारूप Date(yyyy, mm, dd)। इसलिए मैं

items.Where("DateAdded > Date(2013, 06, 18)") 

एक पूर्ण कल्पना here कि पार्स करने और वैध का उपयोग करता है की रूपरेखा है कार्य करके यह काम कर पाने के लिए कर रहा था।

6
yourlist.Where("PostDate > DateTime(2013, 07, 24)"); 
संबंधित मुद्दे