我正在使用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();
我做错了什么?
答案 0 :(得分:65)
最近,当我将Web应用程序从Entity Framework 5升级到Entity Framework 6时,我遇到了这个问题。然后,我意识到需要从应用程序中完全删除System.Data.Entity
DLL才能使用Entity Framework 6 。实体框架6不再是.NET Framework的一部分,因此它独立于System.Data.Entity dll。为了截断时间,您需要使用EntityFramework.dll中的System.Data.Entity.DbFunctions.TruncateTime(...)
方法。是的,这解决了我的问题。
底线:如果您使用的是Entity Framework 6,请首先删除引用System.Data.Entity
DLL,然后在代码中将EntityFunctions.TruncateTime(..)
替换为System.Data.Entity.DbFunctions.TruncateTime(...)
。 [来自EntityFramework.dll]
答案 1 :(得分:5)
我没有删除引用System.Data.Entity
,我刚刚将调用从DbFunctions.TruncateTime
更改为System.Data.Entity.DbFunctions.TruncateTime
,这对我有用。
我正在使用实体6。
答案 2 :(得分:-1)
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查询获取日期结果,请使用此功能。