2

[日付]列と個別の[時間]列を持つSQLServer2005テーブルがある状況があります。このテーブルをクエリしようとすると、次のSQLと同等の処理を実行したいと思います。

where Date + Time > @Something

いくつかの背景情報-日付は00:00の時間コンポーネントを持つ日付として保存され、時間は1900-01-01の日付コンポーネントを持つ時間として保存されます-これは、SQLで2つを合計すると完全なDateTimeが得られることを意味します。

上記のインデックス作成の意味があることは知っていますが、それは問題の内容ではありません。

linq to entityでこれをどのように行いますか?

注意すべき他のいくつかのこと:

  • データベーススキーマの変更は問題外です。
  • これはSQL2005であるため、Timeデータ型はなく、EFからTimeSpanは返されません(EFモデルを変更してTimeSpanにキャストしようとしましたが、サイコロはありません)
  • 純粋なLinq-to-Entitiesに固執し、E-SQL/ストアドプロシージャ/ExecuteQueryルートをたどらないようにしたい。
4

2 に答える 2

0

Entity Framework (バージョン > 4) には EntityFunctions クラスがあります。したがって、次のようなことができます:

... where EntityFunctions.CreateDateTime(date.Year, date.Month, date.Day, 
             time.Hour, time.Minute, time.Second) < DateTime.Now

または、昔ながらの方法でそれを行うこともできます。

... where date.Date < DateTime.Now.Date || (date.Date == DateTime.Now.Date && time.Time < DateTime.Now)
于 2012-10-23T21:18:46.307 に答える
0

非常に不自由なアイデアですが、次のとおりです。

var date = DateTime.Parse("2012-10-23");
var time = DateTime.Parse("1900-01-01 09:00:00);
var something = date + time;

[...] where Date + Time > something;
于 2012-10-23T21:08:10.713 に答える