web-dev-qa-db-ja.com

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

私は何を間違えていますか?

28
J86

WebアプリケーションをEntity Framework 5からEntity Framework 6にアップグレードしたときに、この問題に最近直面しました。その後、System.Data.Entity DLLを完全にアプリケーションから削除する必要があることに気付きました。 Entity Framework 6は.NET Frameworkの一部ではなくなったため、System.Data.Entity dllから独立しています。時間を短縮するには、System.Data.Entity.DbFunctions.TruncateTime(...)メソッドを使用する必要がありますEntityFramework.dllはい、私の問題は解決しました。

最下行:Entity Framework 6を​​使用している場合は、最初に参照System.Data.Entity DLL=を削除してから、コード内でEntityFunctions.TruncateTime(..)System.Data.Entity.DbFunctions.TruncateTime(...)を使用[EntityFramework.dllから]

66
Emran Hussain

参照を削除しませんでしたSystem.Data.Entity、呼び出しをDbFunctions.TruncateTimeからSystem.Data.Entity.DbFunctions.TruncateTimeそしてそれは私のために働いた。

エンティティ6を使用しています。

5
Tiago Ávila