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

Не удается заставить EntityFunctions.TruncateTime() работать

Я использую Entity Framework Code First. Использование LINQ to Entity Я хочу захватить запись на основе значения DateTime. Вот мой текущий код:

/// <summary>
/// A method to check and see if the Parsed Game already exists on the
/// database. If Yes, then True is returned, otherwise False is returned.
/// </summary>
/// <param name="context">The Db Context to use</param>
/// <param name="homeTeam">The Name of the Home Team for the Game.</param>
/// <param name="awayTeam">The Name of the Away Team for the Game.</param>        
/// <param name="date">The Date of the Game</param>
/// <returns></returns>
public bool doesGameAlreadyExist(PContext context, String homeTeam, String awayTeam, String date)
{
    string dtObjFormat = "dd MMM yyyy";
    DateTime dt;
    DateTime.TryParseExact(date, dtObjFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out dt);
    var result = context.Games.Where(x => EntityFunctions.TruncateTime(x.Start) == dt.Date).FirstOrDefault();
    return result != null;

}

В приведенном выше коде возникает следующая ошибка:

    LINQ to Entities does not recognize the method 'System.Nullable`1[System.DateTime] TruncateTime(System.Nullable`1[System.DateTime])' method, and this method cannot be translated into a store expression.

Я также пробовал следующий код, и я получаю ту же ошибку:

var result = context.Games.Where(x => EntityFunctions.TruncateTime(x.Start) == EntityFunctions.TruncateTime(dt.Date)).FirstOrDefault();

Что я делаю неправильно?

4b9b3361

Ответ 1

Недавно я столкнулся с этой проблемой, когда обновил свое веб-приложение от Entity Framework 5 до Entity Framework 6. Затем я понял, что DLL System.Data.Entity необходимо полностью удалить из приложения, чтобы работать с Entity Framework 6. Entity Framework 6 больше не является частью .NET Framework, поэтому он не зависит от dll System.Data.Entity. Чтобы сократить время, вам нужно использовать метод System.Data.Entity.DbFunctions.TruncateTime(...) из EntityFramework.dll. Да, это решило мою проблему.

Нижняя строка. Если вы используете Entity Framework 6, сначала удалите ссылку System.Data.Entity DLL, а затем в своем коде замените EntityFunctions.TruncateTime(..) на System.Data.Entity.DbFunctions.TruncateTime(...). [From EntityFramework.dll]

Ответ 2

Я не удалял ссылку System.Data.Entity, я только что изменил вызов от DbFunctions.TruncateTime до System.Data.Entity.DbFunctions.TruncateTime, и это сработало для меня.

Я использую Entity 6.

Ответ 3

DateTime? dt = DateTime.Parse(sText);
campaigns = _CampaignMasterRepository.Get().OrderByDescending(a => a.LaunchOn).Where(a => a.UserId == obj_User.ID && a.CampaignStatus == (int)OmevoEnums.CampaignStatus.Sent && a.CampaignName.Contains(sText) || DbFunctions.TruncateTime(a.LaunchOn) == DbFunctions.TruncateTime(dt)).ToList();

Для получения результатов с помощью Linq-запросов эта функция используется.