2013-08-10 8 views
6

से ही लागू किया जा सकता है, मैं कैश पर रखे गए डेटा को प्राप्त करने का प्रयास कर रहा हूं। लेकिन यह "नई फ़िल्टरसर्सलॉग चुनें" लाइन पर एक अपवाद फेंकता है। अपवाद: यह फ़ंक्शन केवल निकालते हैं मैं कोड ब्लॉक "नई FilterSsrsLog चुनें" और लिखना "r चुनें" यह काम करता है संस्थाओंlinq अपवाद: यह फ़ंक्शन केवल LINQ से Entities

List<ExecutionLog3> reportServerDB = UpdateCache(); 
     var reportLog = (from r in reportServerDB 
         orderby r.TimeStart descending 
         where ((model.reportName == null ? true : r.ItemPath.Contains(model.reportName)) && 
          (model.reportFolder == null ? true : r.ItemPath.Contains(model.reportFolder)) && 
          (r.TimeStart >= startDateTime) && 
          (r.TimeStart <= endDateTime) 
         ) 
        select new FilterSsrsLog 
        { 
         UserName = r.UserName, 
         ReportName = r.ItemPath, 
         ReportFolder = r.ItemPath, 
         Format = r.Format, 
         Parameters = r.Parameters, 
         TimeStart = r.TimeStart, 
         TimeEnd = r.TimeEnd, 
         TotalTime = EntityFunctions.DiffMilliseconds(r.TimeStart, r.TimeEnd) 
        }); 

को LINQ से लागू किया जा सकता है। लेकिन मुझे केवल उस कॉलोमन्स की ज़रूरत है तो मैं इस समस्या को हल करने के लिए क्या कर सकता हूं?

उत्तर

9

कारण आपको यह त्रुटि मिल रही है कि क्वेरी स्मृति में निष्पादित की जाती है, न कि RDBMS में। DiffMilliseconds फ़ंक्शन एक मार्कर है कि एंटीटी फ्रेमवर्क प्रदाता आपके आरडीबीएमएस को भेजने के लिए आरडीबीएमएस-विशिष्ट एसक्यूएल में परिवर्तित हो जाता है। जब मेमोरी में IQueryable<T> पर लागू होता है, तो इसके बजाय अपवाद फेंकने पर फ़ंक्शन इसके परिणाम की गणना नहीं करता है।

आप स्मृति में इस क्वेरी चलाने के लिए चाहते हैं, के साथ दो तारीखों के

TotalTime = (r.TimeEnd - r.TimeStart).TotalMilliseconds 

घटाव की जगह

TotalTime = EntityFunctions.DiffMilliseconds(r.TimeStart, r.TimeEnd) 

एक TimeSpan मूल्य जिसमें से आप अपनी TotalMilliseconds संपत्ति ले जा सकते हैं पैदा करता है।

+0

कुल टोलिसेकंड नहीं होगा? –

+1

@ इट्स नॉटलाली। आह, आप सही हैं, यह 'TotalMilliseconds' होना चाहिए। धन्यवाद! – dasblinkenlight

+0

@dasblinkenlight आपको बहुत धन्यवाद, यह काम करता है। –

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