2011-12-28 10 views
9

Linqクエリで2つの日付が等しく、日付が2つの異なるテーブルから来るかどうかを確認する必要があります)。私はWeb上の既存のソリューションを見てきました。いくつかは私の場合は適用されませんし、いくつかはエレガントではありません。何かがあれば、より良い代替ソリューションを探しているだけです。Linqで2つの日付が等しいかどうかを調べる優雅な解決方法(2番目の日付はパラメータではない)

サンプルクエリ(日付のみの部分を比較する必要がある):

var query = from t1 in Table1 
      join t2 in Table2 on t1.Id equals t2.ForeignKeyId 
      where t1.Id = someId 
       && t1.Date1.Date.Equals(t2.Date2.Date) 

をこの1つはEntitiiesにLINQでサポートされていないエラー「『日付』で失敗するだけ初期化子、エンティティのメンバー、およびエンティティのナビゲーションプロパティを。サポートされている "

投稿'Date' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supportedには、曜日、月、および年を別々に比較するソリューションがあります。私はそれを拡張メソッドにラップしようとしましたが、Linqは拡張メソッドも好きではないようです。 2番目の日付は変数ではないので、リンクされたポストで言及されている他のソリューションを使用することはできません。何らかの理由でLinq内の日付に "AddDays"メソッドを呼び出すことはできません。 LinqのDate APIには多くの制限があるようです。

+0

比較する日、月、年は別に動作しますか? – dasblinkenlight

+0

はい、私はそれらを別々に比較すれば動作します。 – RKP

答えて

16

DiffDaysをEntityFunctionsクラスから使用してください。 は個人的にこれを使用していないが、このように試してみる価値は決して:予想通り

var query = from t1 in Table1 
     join t2 in Table2 on t1.Id equals t2.ForeignKeyId 
     where t1.Id = someId 
      && EntityFunctions.DiffDays(t1.Date1, t2.Date2) == 0 
+1

ありがとうございました。それは魅力のように働く。私は生成されたSQLを見て、日付の比較はDATEDIFF(日、t1.Date1、t2.Date2)= 0に変換されます。これは正しいです。私は前にこの "EntityFunctions"について知りませんでした。もう一度ありがとう。 – RKP

+0

あなたが歓迎してくれたことを嬉しく思います。 – Reniuz

+0

あなたのコードを少し修正したバージョンを使用したことを忘れてしまいました。私は私のポストで述べたように "Datetime"の "Date"プロパティを使うことができないので、 "EntityFunctions.DiffDays(t1.Date1、t2.Date2)== 0"を使っていました。 – RKP

0

私が覚えている限り、== operatorを使って日付を比較することができます。

+0

'=='は日付と時刻の両方の部分を比較します。 OPは比較される日付だけを望んでいる。 – dasblinkenlight

関連する問題