9

問題: 記録日が 2 つの日付 (mm/dd/yyyy) の間にあるものをユーザーが検索できる検索フォームがあります。

すべてのレコードとオブジェクトは Datetime 型ですが、比較する必要があるのは時刻部分ではなく日付部分だけです。

MSDN によると、Date プロパティは LINQ でサポートされていますが、このステートメントではラムダ部分に .Date を追加できません。

エラー:

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

例:

x.DateCreated.Date

この問題はよくあると思います - どうすれば解決できますか?

<= 部分に 23:59:59 = 86399 秒を追加することで、他の日付を埋めることができると思います

これが声明です。(db はコンテキスト オブジェクトです)

 model.Contacts = 
                db.Prospects.Where(x => x.DateCreated >= df.Date && x.DateCreated <= dt.Date)
                    .OrderByDescending(x => x.DateCreated)
                    .Take(100)
                    .ToList();
4

3 に答える 3

14

TruncateTime次の関数を使用する必要があります。

EntityFunctions.TruncateTime(x.DateCreated) 
于 2013-07-11T11:27:59.283 に答える
4

Entity Framework バージョン 6 ではDbFunctions.TruncateTime ()を使用する必要があります。

var fromDate = criteria.FromCreatedDate.Value.Date;
items.Where(i => DbFunctions.TruncateTime(i.CreatedOnDate) >=fromDate);

timepart を無視して、日付がfromdateより後のすべてのアイテムを取得します。

ありがとう@gor。

于 2015-06-04T03:54:28.647 に答える
1

I use the following solution

DateTime startDate = new DateTime(df.Year, df.Month, df.Day, 0,0,0);
DateTime endDate = new DateTime(df.Year, df.Month, df.Day, 23,59,59);

model.Contacts = 
                db.Prospects.Where(x => x.DateCreated >= startDate  && x.DateCreated <= endDate )
                    .OrderByDescending(x => x.DateCreated)
                    .Take(100)
                    .ToList();
于 2013-07-11T11:31:07.770 に答える