Подтвердить что ты не робот

Как выполнить сравнение даты в запросе EF?

Пожалуйста, помогите. Я пытаюсь выяснить, как использовать DATE или DATETIME для сравнения в запросе linq.

Пример: Если бы я хотел, чтобы все имена Employee для тех, кто начинался до сегодняшнего дня, я бы сделал что-то вроде этого в SQL:

SELECT EmployeeNameColumn
FROM EmployeeTable
WHERE StartDateColumn.Date <= GETDATE() //Today

Но как насчет linq?

DateTime startDT = //Today

var EmployeeName =  
from e in db.employee
where e.StartDateColumn <= startDT 

Вышеуказанное WHERE не работает:

Сведения об исключении: System.NotSupportedException: указанный тип member 'Date' не поддерживается в LINQ to Entities. Поддерживаются только инициализаторы, сущности и свойства навигации сущности.

4b9b3361

Ответ 1

Это должно сработать. Вы уверены, что не существует другой части запроса, вызвавшего исключение? У меня есть несколько экземпляров запросов формы

var query = from e in db.MyTable
            where e.AsOfDate <= DateTime.Now.Date
            select e;

в моем коде.

Ответ 3

Возможно, это связано с тем, что дата в базе данных является нулевой. Попробуйте следующее:

var EmployeeName =
from e in db.employee
where e.StartDateColumn.Value <= startDT 

Ответ 4

Вы можете проверить состояние, подобное этому

var nextDay = DateTime.Today.AddDays(1);

var query = from e in db.MyTable
            where e.AsOfDate >= DateTime.Today && e.AsOfDate < nextDay 
            select e;

здесь вы получите записи о дате AsOfDate, когда мы проверяем между сегодняшним днем ​​(00:00:00) и tommorow (00:00:00), мы получим сегодняшнюю дату записи только того, что когда-либо может быть временем...

Ответ 5

Вы не можете использовать .Date

Если вы хотите проверить на сегодняшний день, вы можете создать дату и время без времени

DateTime myDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
var e = (from mds in myEntities.Table
         where mds.CreateDateTime >= myDate
         select mds).FirstOrDefault();

Ответ 6

Мне любопытно сообщить сообщение об ошибке 'Date', когда вы передаете 'DateTime'. Может ли быть, что 'StartDateColumn' на самом деле является 'Date', а не a 'DateTime' в базе данных? Это может испортить сравнение...

Ответ 7

попробуйте следующее:

DateTime dd = DateTime.Parse("08/13/2010 00:00:00");
var data = from n in ContributionEligibilities
           where n.ModifiedDateTime.Date >= DateTime.Parse("08/13/2010").Date
           select n; 
data.Dump("Result") ;

Ответ 8

Я использую LinqDataSource, и у меня были проблемы с получением моего запроса с помощью сравнения даты в нем для выполнения без ошибок. Ответ заключается в использовании функции WhereAddParameters и добавлении тестового значения в качестве строго типизированного параметра.

См. пример ниже, где я сопоставляю groupid и проверяю, больше ли StopDate в моей записи, или равна дате даты/времени.

Я использую этот фрагмент кода в настоящее время, и он работает как шарм.

LinqCampaigns.WhereParameters.Add("StopDate", System.Data.DbType.Date, DateTime.Now.ToString())
LinqCampaigns.Where = "GroupId = " & myGrp & " &&  " & "StopDate >= @StopDate"

Работает как очарование....

Ответ 9

используйте локальную переменную для хранения значения Date, а затем используйте эту переменную в запросе:

DateTime today = DateTime.Now.Date; from scheme in context.schemes where scheme.EndDate > today select scheme

Ответ 10

. Дат не работал, но .Day сделал для меня.

var query = from o in Payments
    where o.Order.OrderDate.Day != o.PaymentDate.Day
    orderby o.Order.OrderDate
    select new
    {
     o.Order.OrderID,
     o.Order.OrderDate,
     o.PaymentDate,      
     o.Order.FirstName,
     o.Order.LastName,
     o.Order.CustomerID
    };


query.Dump();

Ответ 11

убедитесь, что вы проверяете нулевое значение следующим образом:

 '(from mm in _db.Calls 
   where mm.Professionnal.ID.Equals(proid)
   && mm.ComposedDate.HasValue &&
   (mm.ComposedDate.Value >= datemin) && (mm.ComposedDate.Value <= date)
   select mm).ToArray();'