无法获得EntityFunctions.TruncateTime()工作(Can't get

2019-09-01 03:12发布

我使用实体框架代码优先。 使用LINQ到实体我要抢基于日期时间值的记录。 这里是我当前的代码:

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

我究竟做错了什么?

Answer 1:

我最近遇到这个问题时,我从升级实体框架5我的Web应用程序到实体框架6。然后,我意识到, System.Data.Entity DLL需要从应用程序中删除完全是为了与实体框架6.实体框架工作图6是不.NET Framework的一部分再因此它是独立System.Data.Entity的DLL的。 为了截断的时候,你就需要使用System.Data.Entity.DbFunctions.TruncateTime(...)方法从EntityFramework.dll。 是的,这解决了我的问题。

底线 :如果你正在使用实体框架6,首先删除引用System.Data.Entity DLL,然后在你的代码,替代EntityFunctions.TruncateTime(..)System.Data.Entity.DbFunctions.TruncateTime(...) 。 [来自EntityFramework.dll]



Answer 2:

我没有删除参考System.Data.Entity ,我刚换了电话从DbFunctions.TruncateTimeSystem.Data.Entity.DbFunctions.TruncateTime ,它为我工作。

我使用的是实体6。



Answer 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查询日期结果使用此功能。



文章来源: Can't get EntityFunctions.TruncateTime() to work