6

エンティティフレームワークで動的なlinqライブラリを使用していて、日付を比較したいと思います。ここで次のSOの記事に基づいてライブラリを正常に拡張しましたが、通常のlinq式の場合と同じように、エンティティオブジェクトのDateTimeプロパティの日付部分だけをライブラリで比較することはできないようです。

私がやろうとしているのは、動的linqに次のようなラムダを作成させることです。

// Compare just dates
p => p.CreatedDate.Value.Date == '2012/08/01'

それよりも:

// Compares date + time
p => p.CreatedDate == '2012/08/01'

これに関するアイデアをいただければ幸いです。

4

1 に答える 1

4

System.DateTimeDynamic Linqパーサーは、プロパティを含む、このタイプのすべてのパブリックメンバーをサポートしDateます。だからあなたは次のようなことをすることができます

DateTime comparisonDate = new DateTime(2012, 8, 1);
var query = items.Where("CreatedDate.Value.Date == @0", comparisonDate);

更新DateTime.Date:Entity Frameworkを使用している場合、プロパティのSQLへの変換をサポートしていないため、この例は機能しません。通常、EntityFunctions.TruncateTime()この関数を使用して同じ効果を実現できますが、この関数は、変更せずにDynamicLinqパーサーにアクセスすることはできません。ただし、次のようなことを実行できるはずです(テストされていません)。

var query = items.Where("CreatedDate.Value.Year == @0.Year && CreatedDate.Value.Month == @0.Month && CreatedDate.Value.Day== @0.Day", comparisonDate);
于 2012-08-28T21:26:33.473 に答える