エンティティフレームワークで動的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'
これについてのアイデアは大歓迎です。
動的Linqパーサーは、 Date
プロパティを含む、 System.DateTime
型のすべてのパブリックメンバーをサポートします。だからあなたは次のようなことをすることができます
DateTime comparisonDate = new DateTime(2012, 8, 1);
var query = items.Where("CreatedDate.Value.Date == @0", comparisonDate);
UPDATE :Entity Frameworkを使用している場合、この例は、 DateTime.Date
プロパティのSQLへの変換をサポートしていないため、機能しません。通常は、 EntityFunctions.TruncateTime()
関数を使用して同じ効果を得ることができますが、この関数には変更を加えないとDynamic Linqパーサーにアクセスできません。ただし、次のようなことはできるはずです(テストされていません)。
var query = items.Where("CreatedDate.Value.Year == @0.Year && CreatedDate.Value.Month == @0.Month && CreatedDate.Value.Day== @0.Day", comparisonDate);