Entity Framework Дата парсинга - PullRequest
4 голосов
/ 10 января 2011

Я пытаюсь выполнить запрос LINQ to Entities (я все еще очень плохо разбираюсь в EF и узнаю, где он отличается от LinqToSQL), и пытаюсь сделать что-то вроде этого:работает в LinqPad, это не в моем коде.Выдается исключение:

The specified type member 'Date' is not supported in LINQ to Entities.

Поддерживаются только инициализаторы, элементы сущностей и свойства навигации сущностей.

Как это сделать в LinqToEF?Поле в базе данных является полным датой времени (с временным кодом), и я пытаюсь выполнить анализ только по дате.

Ответы [ 3 ]

5 голосов
/ 10 января 2011

Вы не можете просто использовать app.ReleaseDate.Data, но вы можете:

var begin = new DateTime(2011, 1, 1);
var end = begin.AddHours(24);

Apps = (from app in context.Instances
             where 
               (app.ReleaseDate >= begin) and
               (app.ReleaseDate < end)
             select new ScalpApp
             {
             Image = app.Image,
             PublisherName = app.PublisherName,
             }).ToList();
3 голосов
/ 10 января 2011

В этом поле можно даже использовать индекс в поле даты:

DateTime begin = new DateTime(2011, 1, 1);
DateTime end = new DateTime(2011, 1, 2);

Apps = (from app in context.Instances
             where 
               (app.ReleaseDate >= begin) and
               (app.ReleaseDate < end)
             select new ScalpApp
             {
             Image = app.Image,
             PublisherName = app.PublisherName,
             }).ToList();
0 голосов
/ 17 февраля 2014

EF не может перевести получение Date части DateTime в код SQL. Но у него есть EntityFunctions.TruncateTime метод, который можно перевести в каноническую функцию TruncateTime:

DateTime begin = new DateTime(2011, 1, 1);

Apps = (from app in context.Instances
        where EntityFunctions.TruncateTime(app.ReleaseDate) == begin
        select new ScalpApp {
            Image = app.Image,
            PublisherName = app.PublisherName,
        }).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...