23

Я использую сначала код структуры Entity Framework. Использование LINQ to Entity Я хочу захватить запись на основе значения DateTime. Вот мой текущий код:Не удается получить EntityFunctions.TruncateTime() для работы

/// <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(); 

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

+0

Очень странно. Это похоже на то, что у вас был еще один статический класс 'EntityFunctions'. Что делать, если вы нажмете F12 на «EntityFunctions»? Вы попадаете в пространство имен System.Data.Entity.dll и 'System.Data.Objects'? – Slauma

+0

У меня такая же проблема - с использованием альфа-версии EF6 –

ответ

54

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

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

+3

Если вы уже используете 'EntityFunctions', вы, вероятно, импортируете пространство имен System.Data.Entity. Поэтому просто удаление ссылки на сборку System.Data.Entity v4.0 и замена 'EntityFunctions' на' DbFunctions' в коде должны работать для большинства людей. – pseudocoder

+0

Если хотите поставить .Include() .. мне все равно нужен System.Data.Entity. Есть ли Include в EntityFramework.dll версии 6+? –

0
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-запросов эта функция используется.

3

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

Я пользуюсь организацией 6.

+0

Это должен быть правильный ответ! – Nour

+0

Спасибо @Nour. Я рад за помощь! –

+0

это то же самое – Jackstine

Смежные вопросы