23

私はEntity Framework Code Firstを使用しています。 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'をどこかに持つように見えます。 「EntityFunctions」でF12を押した場合はどうなりますか?あなたは 'System.Data.Entity.dll'と' System.Data.Objects'名前空間に入っていますか? – Slauma

+0

私は同じ問題を抱えています - alpha版のEF6を使用しています –

答えて

54

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

ボトムライン:あなたはEntity Frameworkの6を使用している場合は、最初の参照System.Data.Entity DLLを削除して、あなたのコードでは、System.Data.Entity.DbFunctions.TruncateTime(...)EntityFunctions.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

関連する問題