2012-12-06 12 views
10

का उपयोग कर तिथियों की तुलना करें मुझे आइटम द्वारा आपूर्ति की गई तारीख को पूर्व-निर्दिष्ट समय पर समाप्त होने वाले मेरे डेटाबेस से आइटम्स की एक सूची वापस करने की आवश्यकता है। मेरे गलत कोड इस प्रकार है:LINQ से इकाइयों (इकाई फ्रेमवर्क)

return All().Where(o => new DateTime(o.expiry_date.Year, o.expiry_date.Month, o.expiry_date.Day, 17, 30, 0) >= DateTime.Now) 

त्रुटि मैं मिलता है:

केवल parameterless निर्माणकर्ता और initializers संस्थाओं को LINQ में समर्थित हैं

क्या किसी को पता है कि मैं कैसे ठीक कर सकते हैं इस?

+1

आप उपयोग नहीं कर सकते 'expiry_date' सीधे? '। जहां (ओ => o.expiry_date> = दिनांक समय.अब)'। – Oded

+0

इसमें आइटम द्वारा निर्दिष्ट दिनांक को शामिल करना होगा लेकिन पूर्व निर्धारित समय का उपयोग करना चाहिए, दुर्भाग्य से नहीं। यहां तक ​​कि expiry_date2 प्रॉपर्टी भी काम नहीं करेगी क्योंकि आपको पहले ToList() करना होगा। – Jimbo

+0

लिंक bellow के माध्यम से जाओ .. [केवल LINQ में दिनांक की जाँच करें] [1] [1]: http://stackoverflow.com/a/24380028/1833050 बस रिकार्ड के लिए –

उत्तर

26

इसके बजाय EntityFunctions का उपयोग करें। शायद CreateDateTime विधि।

तो शायद इस तरह:

return All().Where(o => EntityFunctions.CreateDateTime(o.expiry_date.Year, o.expiry_date.Month, o.expiry_date.Day, 17, 30, 0) >= DateTime.Now) 

अद्यतन:

EF6 उपयोग करते समय, DbFunctions बजाय का उपयोग करें।

+8

, EntityFunctions EF6 में हटाई गई है, [System.Data.Entity.DbFunctions] द्वारा प्रतिस्थापित किया गया है (http://msdn.microsoft.com/en-us/library/system.data.entity.dbfunctions (v = vs.113) .aspx)। – natenho

1

का उपयोग करें:

return All().Where(o => EntityFunctions.CreateDateTime(o.expiry_date.Year, o.expiry_date.Month, o.expiry_date.Day, 17, 30, 0) >= DateTime.Now) 
8

आप उपयोग कर सकते हैं:

var result = await db.Articles 
      .Where(TruncateTime(x.DateCreated) >= EntityFunctions.TruncateTime(DateTime.Now)) 
      .ToListAsync(); 
संबंधित मुद्दे