6

私はこのクエリを実行しようとしています:

DateTime DDate=DateTime.Today; //Today's date without Time
var v= db.measurements.Where(m => EntityFunctions.TruncateTime(m.InDate) == DDate);

時間部分を無視して、これら 2 つの日付が等しいオブジェクトを返すだけです。

しかし、私は受け取ります:

{"FUNCTION [データベース].TruncateTime が存在しません"}

スタックトレース:

at MySql.Data.MySqlClient.MySqlStream.ReadPacket()
at MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int64& insertedId)
at MySql.Data.MySqlClient.Driver.GetResult(Int32 statementId, Int32& affectedRows, Int64& insertedId)
at MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force)
at MySql.Data.MySqlClient.MySqlDataReader.NextResult()
at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
at MySql.Data.Entity.EFMySqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior)

私は使用しています:

  • C# ビジュアル スタジオ 2010
  • EntityFramework 4 データベースが最初
  • ネットワークフレームワーク 4
  • MYSQL サーバー 5.6

MySQL.Data および MySQL.Data.Entity のバージョンは 6.6.5.0 です。

TruncateTime は MySQL でサポートされています。

この人にも同じことがありました。

4

2 に答える 2

1

A Torresの応答のアプローチは機能しますが、私にとっては少しハックだと感じたので、別のアプローチを見つけました(これはEF6で機能し、EF5には同様のアプローチが存在しますが、テストできません):

  1. クラス DatabaseFunctions を作成し、次のコードを追加します。

    [Function(FunctionType.BuiltInFunction, "Date")]
    public static DateTime? Date(DateTime? dateValue) 
        => Function.CallNotSupported<DateTime>();
    
  2. DbContext の OnModelCreating に次の行を追加します。

    protected override void OnModelCreating(DbModelBuilder modelBuilder){
        modelBuilder.Conventions.Add(new FunctionConvention<DatabaseFunctions>())
        // ...
    }
    
  3. EntityFunctions.TruncateTime の代わりに DatabaseFunctions.Date を使用します。

于 2016-08-22T11:26:58.083 に答える