2012-08-25 12 views
8

मेरे पास निम्नलिखित linq अभिव्यक्ति है। मैं Nvarchar क्षेत्र में संख्यात्मक मूल्यों की गणना करना चाहता हूँ। मैं ऐसा करने के लिए निम्नलिखित कोड का उपयोग करता हूं। लेकिन जब मैं इसे चलाने की कोशिश करता हूं तो मुझे एक त्रुटि मिलती है।लिंक अभिव्यक्ति में Int.Parse

 var m = new MaterialModelContainer(); 

     var list = (from x in 
         (
          from inv in m.INVs 
          join l in m.LIBs on inv.MESC equals l.MESC 
          join o in m.OUTs on inv.MESC equals o.MESC 
          join t in m.TRANs on inv.MESC equals t.MESC 
          where t.TYPE == "60" 
          select new 
           { 
            l.MESC, 
            l.LINE_NO, 
            l.UNIT_LINE, 
            Description = l.DES + " " + l.PART_NO, 
            inv.NEW_QTY, 
            o.PJ, 
            o.DATE, 
            o.QTY, 
            o.QTY_REC, 
            TranQty = t.QTY, 
            tranDate = t.DATE 

           } 
         ) 
        group x by 
         new 
          { 
           x.MESC, 
           x.LINE_NO, 
           x.UNIT_LINE, 
           x.Description, 
           x.NEW_QTY, 
           x.PJ, 
           x.DATE, 
           x.QTY, 
           x.QTY_REC 
          } 
        into g 
        select new 
         { 
          QTY_Consum_1 = g.Where(c => int.Parse(c.tranDate) >= cuDate && int.Parse(c.tranDate) <= endDate).Sum(d => int.Parse(d.TranQty)) 

         } 
        ).ToList(); 

त्रुटि विवरण:

संस्थाओं को LINQ विधि 'Int32 पार्स (System.String)' विधि, और इस विधि को नहीं पहचानता है एक दुकान अभिव्यक्ति में अनुवाद नहीं किया जा सकता

मैं इस समस्या को कैसे हल कर सकता हूं और यह सी लिख सकता हूं इस से बेहतर ओडी?

मैं इस

select new 
          { 
           QTY_Consum_1 = g.Where(c => SqlFunctions.StringConvert(c.tranDate) >= cuDate && SqlFunctions.StringConvert(c.tranDate) <= endDate).Sum(d => SqlFunctions.StringConvert(d.TranQty)), 
           g.Key.MESC 
          } 
         ).ToList(); 

करने के लिए कोड बदल सकता है लेकिन इस त्रुटि enter image description here

+0

शायद यह उत्तर आपको मदद करेगा: [ईएफ 4.0 में स्ट्रिंग को int में परिवर्तित करें] (http://stackoverflow.com/questions/5754218/convert-string-to-int-in-ef-4-0) –

उत्तर

4

आप where में int.parse का उपयोग नहीं कर सकते हैं। आप इस तरह आपकी क्वेरी पुनर्लेखन कर सकते हैं:

var list = (from x in 
       (
        from inv in m.INVs 
        join l in m.LIBs on inv.MESC equals l.MESC 
        join o in m.OUTs on inv.MESC equals o.MESC 
        join t in m.TRANs on inv.MESC equals t.MESC 
        where t.TYPE == "60" && t.QTY!="" 
        select new 
         { 
          l.MESC, 
          l.LINE_NO, 
          l.UNIT_LINE, 
          Description = l.DES + " " + l.PART_NO, 
          inv.NEW_QTY, 
          o.PJ, 
          o.DATE, 
          o.QTY, 
          o.QTY_REC, 
          TranQty = t.QTY, 
          tranDate = t.DATE 

         } 
       ).ToList() 
      group x by 
       new 
        { 
         x.MESC, 
         x.LINE_NO, 
         x.UNIT_LINE, 
         x.Description, 
         x.NEW_QTY, 
         x.PJ, 
         x.DATE, 
         x.QTY, 
         x.QTY_REC 
        } 
      into g 
      select new 
       { 
        QTY_Consum_1 = g.Where(c => int.Parse(c.tranDate) >= cuDate && int.Parse(c.tranDate) <= endDate).Sum(d => int.Parse(d.TranQty)), 
        g.Key.MESC 
       } 
      ).ToList(); 

कॉल .ToList() विधि, तो int.Parse(variable) का उपयोग करें।

एक अच्छा दिन है।

+2

लेकिन डेटाबेस के बाहर जहां खंड निष्पादित किया जाएगा! इंटरमीडिएट सूची बनाने से बचने के लिए –

+2

'AsEnumerable' का उपयोग करने के लिए बेहतर। – juharr

4

मिल अपने जहां खंड में, आप int.Parse फोन नहीं कर सकते हैं। इकाई फ्रेमवर्क यह नहीं जानता कि इसे SQL में कैसे परिवर्तित करें। अपने Where को संशोधित करने पर विचार करें।

+3

कैसे इस समस्या को हल करने के लिए, कृपया मुझे एक समाधान दें। धन्यवाद – Pouya

6

द्वारा अपने सभी int.Parse को बदलें। स्ट्रिंग टू इंट को कन्वर्ट करने के लिए कोई फ़ंक्शन नहीं है। आपको उलटा करने की कोशिश करनी चाहिए और स्ट्रिंगकॉन्टर के साथ अपने इंट टू स्ट्रिंग को कन्वर्ट करना चाहिए।

एसक्यूएलफ़ंक्शन उपयोगिताओं SQL कमांड में कमांड का अनुवाद करने में सक्षम होंगे।

+0

क्या यह विपरीत नहीं होगा, और संख्याओं को स्ट्रिंग में परिवर्तित करेगा? –

+0

मैं int.parse को SQLFunctions में बदलता हूं। StringConvert (चर) लेकिन मुझे त्रुटि मिलती है, मैं सवाल संपादित करता हूं। क्रिप्या मेरि सहायता करे। धन्यवाद – Pouya

+0

ट्रैनडेट किस प्रकार का है? –

6

इकाई फ्रेमवर्क एसक्यूएल में उस प्रकार के रूपांतरण का अनुवाद नहीं कर सकता है।

क्या कोई मौका है कि आप वास्तविक डेटा प्रकारों जैसे वास्तविक DateTime प्रकारों का उपयोग करने के लिए अपनी डेटा संरचना को बदल सकते हैं? बड़े डेटा वॉल्यूम के लिए रूपांतरणों को प्रभावित करेगा।

मैं या तो इन रूपांतरणों से बचने के लिए अपने डेटा मॉडल प्रकारों को बदलने की सिफारिश करता हूं, या यदि डेटा की मात्रा हमेशा छोटी होगी, तो डेटा पहले प्राप्त करें, और बाद में ऑब्जेक्ट्स को लिंक का उपयोग करें।

-1

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

मैं इसे लिंक-टू-एसक्यूएल में उपयोग करता हूं और यह काम करता है।

पहले स्ट्रिंग को ऑब्जेक्ट करने के लिए डालें, फिर इसे int में डालें।

from s in db.Students 
select new 
{ 
    s.Name, 
    s.Surname, 
    Birthday = new DateTime((int)(object)(s.dateStr.Substring(0, 4)), 
          (int)(object)(s.dateStr.Substring(4, 2)), 
          (int)(object)(s.dateStr.Substring(6, 2))), 
} 
7

एफई 5:

के बजाय int.Pasrse उपयोग Convert.ToInt32। इकाई फ्रेमवर्क SQL में उचित CAST फ़ंक्शन उत्पन्न करेगा।

एफई 6:

लघु जवाब:

youEntity.Where(c=>SqlFunctions.StringConvert((decimal?)c.INTFIELD).Trim() == STRINGVALUE) 

लांग जवाब:

एफई 6 में आप SqlFunctions.StringConvert साथ स्ट्रिंग के लिए सांख्यिक मान कन्वर्ट करना होगा। लेकिन यह एक समस्या है। यह परिणाम के लिए अनावश्यक रिक्त स्थान जोड़ देगा। तो तुलना विफल हो जाएगी। यही कारण है कि मैंने Trim() रखा है। मैंने इसे ईएफ 6.1.1 के साथ परीक्षण किया है।

+0

क्या कोई इसकी पुष्टि कर सकता है? मेरे लिए यह काम नहीं करता है (ईएफ 6.1.0) – arni

+0

@arni। मेरा संपादन देखें। – Mahmoodvcs

+4

सवाल int के लिए स्ट्रिंग पार्सिंग के बारे में है, इसके विपरीत नहीं। – arni

0

जब आपको यह सुनिश्चित करना होगा कि LINQ से Entities में सीएलआर विधि का उपयोग किया जा सके, तो आप इस स्रोत से बेहतर परामर्श लेंगे: https://msdn.microsoft.com/en-us/library/vstudio/dd456828(v=vs.100).aspx

तेजी से पढ़ने नहीं, इसमें समय लगेगा, लेकिन यहां आपके प्रश्न का उत्तर है (और इसके जैसे कई और)।

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