33

我首先使用实体​​框架代码。使用 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();

我究竟做错了什么?

4

3 回答 3

75

我最近在将 Web 应用程序从 Entity Framework 5 升级到 Entity Framework 6 时遇到了这个问题。然后,我意识到System.Data.Entity需要从应用程序中完全删除 DLL 才能使用 Entity Framework 6。Entity Framework 6 不是.NET Framework 不再存在,因此它独立于 System.Data.Entity dll。为了截断时间,您需要使用System.Data.Entity.DbFunctions.TruncateTime(...)EntityFramework.dll 中的方法。是的,这解决了我的问题。

底线:如果您使用的是 Entity Framework 6,请首先删除参考System.Data.EntityDLL,然后在您的代码中替换EntityFunctions.TruncateTime(..)System.Data.Entity.DbFunctions.TruncateTime(...). [来自 EntityFramework.dll]

于 2013-10-26T02:46:50.080 回答
8

我没有删除 reference System.Data.Entity,我只是将调用从DbFunctions.TruncateTimeto更改System.Data.Entity.DbFunctions.TruncateTime为对我有用。

我正在使用实体 6。

于 2016-10-25T14:17:53.877 回答
-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 查询获取日期结果,请使用此函数。

于 2015-11-19T11:34:23.413 回答