2014-10-31 7 views
1

Я пытаюсь сравнить даты в Entity Framework 6 LINQ Query.Сравнение даты в Entity Framework Linq Query

var bookings = context.Bookings.Include("BookingItems").Where(x=>x.IsDeleted == false && DateTime.Compare(DbFunctions.TruncateTime(x.BookingDate).Value,DateTime.Now.Date)==0).ToList(); 

Однако его приводит к Exception:

"The specified type member 'Date' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported." 

Я просто хочу, чтобы сравнить даты обрезки части времени.

Любые предложения, как это можно сделать?

ответ

2

Linq не может перевести некоторые родной .Net код в Sql поэтому попробуйте использовать DateTime.Now функции и другие функции .Net вне Linq запроса, а затем ссылаться на него в запросе.

String currentTime = DateTime.Now.ToShortDateString(); 

var bookings = context.Bookings.Include("BookingItems").Where(x=>x.IsDeleted == false && DateTime.Compare((x.BookingDate).Value.Date,currentTime)==0).ToList(); 

Я не запускать, хотя там может быть какая-то ошибка синтаксиса, но попробовать в любом случае

+0

Пожалуйста, вы можете дать пример того, как ссылаться на него в запросе –

+0

эта штука сделала трюк DateTime temp = DateTime.Now.Date; var bookings = context.Bookings.Include ("BookingItems"). Где (x => x.IsDeleted == false && DateTime.Compare (DbFunctions.TruncateTime (x.BookingDate) .Value, temp) == 0) .ToList(); –

1

Linq к SQL или SQL не имеет implemination DateTime.Compare

Попробуйте преобразовать в коллекцию.

var bookings = context.Bookings.Include("BookingItems").ToList().Where(x=>x.IsDeleted == false && DateTime.Compare(DbFunctions.TruncateTime(x.BookingDate).Value,DateTime.Now.Date)==0).ToList(); 
+0

Теперь это исключение: { «Эта функция может быть вызвана только из LINQ к Entities»} –