निर्दिष्ट प्रकार के सदस्य 'तिथि' LINQ में संस्थाओं को समर्थित नहीं है। केवल इनिशियलाइज़र, इकाई सदस्य और एंटिटी नेविगेशन गुण


138

एंटिटी फ्रेमवर्क में इस कोड का उपयोग करने पर मुझे निम्नलिखित त्रुटि प्राप्त होती है। मुझे एक विशिष्ट तिथि के लिए सभी पंक्तियों को प्राप्त करने की आवश्यकता है, DateTimeStartइस प्रारूप में टाइप डेटा टाइप है2013-01-30 12:00:00.000

कोड:

 var eventsCustom = eventCustomRepository.FindAllEventsCustomByUniqueStudentReference(userDevice.UniqueStudentReference)
                    .Where(x =>  x.DateTimeStart.Date == currentDateTime.Date);

त्रुटि:

आधार {System.SystemException} = {"निर्दिष्ट प्रकार के सदस्य 'दिनांक' LINQ में संस्थाओं को समर्थित नहीं है। केवल शुरुआती, इकाई सदस्यों और इकाई नेविगेशन गुणों का समर्थन किया जाता है।"}

क्या इसे ठीक करने का कोइ उपाय है?


मैं X.DateTimeStart.Date का उपयोग EF Core 2.1.1 में करने में सक्षम हूँ
कर्स्टन लालच

जवाबों:


271

DateTime.DateSQL में परिवर्तित नहीं किया जा सकता है। दिनांक भाग प्राप्त करने के लिए EntityFunctions.TruncateTime विधि का उपयोग करें ।

var eventsCustom = eventCustomRepository
.FindAllEventsCustomByUniqueStudentReference(userDevice.UniqueStudentReference)
.Where(x => EntityFunctions.TruncateTime(x.DateTimeStart) == currentDate.Date);

UPDATE: जैसा कि @shankbond ने टिप्पणियों में उल्लेख किया है, Entity Framework 6 EntityFunctionsमें अप्रचलित है, और आपको DbFunctionsक्लास का उपयोग करना चाहिए , जिसे Entity Framework के साथ शिप किया गया है।


1
मुझे आपके संस्करण को थोड़ा संशोधित करना होगा। कहाँ (x => EntityFunctions.TruncateTime (x.DateTimeStart) == currentDate.Date); मुझे अपनी तू
तू

1
मुझे आशा है कि आपको कोई आपत्ति नहीं है, मैंने आपके उत्तर को जोड़ते हुए संपादित किया है। यदि आप सहमत हैं, तो केवल संदर्भ के लिए :-) आपके समर्थन के लिए धन्यवाद, मैं वास्तव में इसकी सराहना करता हूं
गिब्बो

1
@ GibboK यकीन है, कोई समस्या नहीं :) यह सिर्फ लंबे स्ट्रिंग को प्रारूपित करने के उद्देश्य से था।
सेर्गेई बेरेज़ोवस्की

68
EntityFunctions अप्रचलित है, इसके बजाय DbFunctions.TruncateTime विधि का उपयोग करें
shankbond

1
निर्दिष्ट प्रकार के सदस्य 'तिथि' LINQ में संस्थाओं को समर्थित नहीं है। केवल इनिशियलाइज़र, इकाई सदस्य और निकाय नेविगेशन गुण समर्थित हैं।
एसएआर

83

अब आपको उपयोग करना चाहिए DbFunctions.TruncateTime

var anyCalls = _db.CallLogs.Where(r => DbFunctions.TruncateTime(r.DateTime) == callDateTime.Date).ToList();


निर्दिष्ट प्रकार के सदस्य 'तिथि' LINQ में संस्थाओं को समर्थित नहीं है। केवल इनिशियलाइज़र, इकाई सदस्य और निकाय नेविगेशन गुण समर्थित हैं।
एसएआर

17

मैं एक समाधान जोड़ना चाहूंगा, जिसने मुझे इकाई ढांचे में इस समस्या को हल करने के लिए प्रेरित किया है:

var eventsCustom = eventCustomRepository.FindAllEventsCustomByUniqueStudentReference(userDevice.UniqueStudentReference)
                .Where(x =>  x.DateTimeStart.Year == currentDateTime.Year &&
                             x.DateTimeStart.Month== currentDateTime.Month &&
                             x.DateTimeStart.Day == currentDateTime.Day
    );

मुझे उम्मीद है कि यह मदद करता है।


15

EntityFunctionsअप्रचलित है। DbFunctionsइसके बजाय उपयोग करने पर विचार करें ।

var eventsCustom = eventCustomRepository.FindAllEventsCustomByUniqueStudentReference(userDevice.UniqueStudentReference)
   .Where(x => DbFunctions.TruncateTime(x.DateTimeStart) == currentDate.Date);

8

हमेशा X.DateTimeStart और currentDate दोनों के लिए EntityFunctions.TruncateTime () का उपयोग करें। जैसे कि :

var eventsCustom = eventCustomRepository.FindAllEventsCustomByUniqueStudentReference(userDevice.UniqueStudentReference).Where(x => EntityFunctions.TruncateTime(x.DateTimeStart) == EntityFunctions.TruncateTime(currentDate));

5

बस सरल गुणों का उपयोग करें।

var tomorrow = currentDateTime.Date + 1;  
var eventsCustom = eventCustomRepository.FindAllEventsCustomByUniqueStudentReference(userDevice.UniqueStudentReference)
                            .Where(x =>  x.DateTimeStart >= currentDateTime.Date 
                                   and x.DateTimeStart < tomorrow);

यदि आपके ऐप में भविष्य की तारीखें संभव नहीं हैं, तो > = x.DateTimeStart> = currentDateTime.Date पर्याप्त है।

यदि आपके पास अधिक जटिल तारीख की तुलना है, तो कैनन कार्यों की जांच करें और यदि आपके पास EF6 + DB फ़ंक्शन हैं

अधिक आम तौर पर - मुद्दों की खोज करने वाले लोगों के लिए EF में समर्थित Linq विधियाँ linq वक्तव्यों के साथ समान मुद्दों की व्याख्या कर सकती हैं जो मेमोरी बेस सूचियों पर काम करती हैं लेकिन EF में नहीं।




0

एक और उपाय हो सकता है:

var eventsCustom = eventCustomRepository.FindAllEventsCustomByUniqueStudentReference(userDevice.UniqueStudentReference).AsEnumerable()
   .Where(x => x.DateTimeStart.Date == currentDate.Date).AsQueryable();
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.