6

EF 4を使用していますDateTimeStartが、エンティティにこの形式の日付のプロパティがあります。EFで16/08/2012 08:14:40クエリを実行して、すべてのエンティティを検索しますwithin the date 16/08/2012 only。以下のコードを使用すると、このエラーが発生します

The specified type member 'Date' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.

私のコード

 DateTime dateTimeNow = DateTime.UtcNow;
        DateTime dateNow = dateTimeNow.Date;
        return db.EventCustoms.Where(x => x.DataTimeStart.Date <= dateNow)
            .Select(y => new { y.EventId, y.EventTitle, y.DataTimeStart });
4

3 に答える 3

6
DateTime dateTimeNow = DateTime.UtcNow;
DateTime dateTomorrow = dateTimeNow.Date.AddDays(1);
return db.EventCustoms.Where(x => x.DataTimeStart < dateTomorrow) 
            .Select(y => new { y.EventId, y.EventTitle, y.DataTimeStart }); 

[編集] @GibboK、少し詳しく説明するには:

Entity Framework は、データベース側で DateTime オブジェクトのDateプロパティを変換できません。

オプションは次のとおりです。

(1)(上記のように)クエリを再考し、テーブルの各行に対してデータベース側で関数呼び出しを必要としないソリューションを試すには....これはクエリのパフォーマンスにも適しています

(2) またはそれが不可能な場合は、EF によって基になるデータ ソースの適切なネイティブ関数に変換できるメソッド ( TruncateTimeなど)を公開するEntityFunctionsクラスを利用できます。

例えば

return db.EventCustoms
    .Where(x => EntityFunctions.TruncateTime(x.DataTimeStart) <= dateNow)
于 2012-08-16T09:08:01.090 に答える
3
DateTime dateTimeNow = DateTime.UtcNow;
        DateTime dateNow = dateTimeNow.Date;
        return db.EventCustoms.Where(
             x => EntityFunctions.DiffDays(x.DataTimeStart, dateNow) >= 0)
            .Select(y => new { y.EventId, y.EventTitle, y.DataTimeStart });
于 2012-08-16T09:02:26.097 に答える
1

EF 6 では:

using System.Data.Entity;
...
db.EventCustoms.Where(x => 
 DbFunctions.TruncateTime(x.DataTimeStart) <= DbFunctions.TruncateTime(dateNow))
于 2014-12-02T09:00:18.273 に答える