1

次のような日付範囲に基づいてデータを取得する必要があります。

SELECT * FROM MyTable WHERE 
myDate >= 'May 17 2012' AND 
myDate <= 'May 17 2012'

私はこのクエリをLINQで記述しましたが、問題はLINQがこのクエリを次のように変換していることです。

SELECT * FROM MyTable WHERE 
myDate >= 'May 17 2012 12:00:00:000AM' AND 
myDate <= 'May 17 2012 12:00:00:000AM'

問題は、LINQが時間部分も考慮していることですが、日付部分のみを検索する必要があります。

誰か助けてもらえますか?

ありがとう。

4

4 に答える 4

8

解決策を見つけたことをあなたと共有したかっただけです!

EntityFunctions は、この目的に使用できる TruncateTime() を提供します。

EntityFunctions.TruncateTime

 from e in MyContext.MyTable.Where(a =>
 EntityFunctions.TruncateTime(a.DateTimeColumn) ==   
 EntityFunctions.TruncateTime(DateTime.Now))  select e;

編集: EntityFramework 6以降の場合:

 from e in MyContext.MyTable.Where(a =>
 DbFunctions.TruncateTime(a.DateTimeColumn) ==   
 DbFunctions.TruncateTime(DateTime.Now))  select e;

ここで見つけました。

于 2012-09-12T09:27:59.387 に答える
1

私は今日もこの答えを探していました-ここで見つけまし た Linq To SQLの日付の比較

また、プロファイラーで再確認して、SQLに変換されていることを確認しました

from e in MyContext.MyTable.Where(a => a.DateTimeColumn.Date == DateTime.Now.Date)
select e;
于 2012-06-12T01:18:01.787 に答える
0

実際には日付部分だけで検索しているわけではありません。そのデートの舞台裏はDateTime. したがって、1 日の行を取得するには、次のように考えてください。

MyDate5 月 17 日の午前 0 時以降で 5 月 18 日の午前 0 時未満のすべての行を取得したいと考えています。

以下のクエリはそれを行います。

var startDate = new DateTime(2012, 05, 17);
var endDate = new DateTime(2012, 05, 18);
var result = 
from row in context.MyTable
where row.MyDate >= startDate &&
      row.MyDate < endDate
select row;
于 2012-05-18T09:35:48.340 に答える
0

2 つのオプションがあります

from t in context.MyTable
where t.MyDate <= maxDate.AddDays(1)
select t

また

from t in context.MyTable
where t.MyDate.Date <= maxDate.Date
select t

2 つ目はデータベース インデックスを正しく使用できない可能性があるため、1 つ目はパフォーマンスが向上する可能性があります。しかし、2 番目の意図はより明白です。

于 2012-05-18T05:59:32.187 に答える