2011-01-29 11 views
1

を照会これは、フォローアップがBetter DateTime? or use default(DateTime) for NULL?DateTimeを処理していますか? NHibernateのに/ LINQは

私は別の例ではなく、他の質問の一つでDateTime?で動作する単純なクエリを実装しようとした質問です。私の場合は

私はpublic virtual DateTime? Expirationプロパティが

<property name="Expiration" not-null="false" type="DateTime" /> 

としてマッピングされてきた今、私のLINQクエリは、次の

return (from product in session.Query<Product>() 
        where 
         !product.Hidden && 
         (product.Expiration != null || 
         (product.Expiration.Value - DateTime.Now).TotalDays < 5 && (product.Expiration.Value - DateTime.Now).TotalDays >= 0) 
        select product).ToList(); 

クエリは述べています:隠されないと5日に失効されていないすべての製品を選びます(< 5期限切れの製品を確認して2番目の小切手を追加する必要があります)

ANTLRから例外があります:

'Antlr.Runtime.NoViableAltException'. [.Where(NHibernate.Linq.NhQueryable`1[Model.Product], Quote((product,) => (AndAlso(Not(product.Hidden), OrElse(DateTime.op_Inequality(product.Expiration, NULL), AndAlso(LessThan(DateTime.op_Subtraction(product.Expiration.Value, p2).TotalDays, p3), GreaterThanOrEqual(DateTime.op_Subtraction(product.Expiration.Value, p4).TotalDays, p5)))))),)] 

どのようにDateTimeを処理しますか? NHibernate 3.0とLINQで?

+0

Expiration!= nullが私の必要とするものと反対です(期限切れに設定されていない製品を選択してください)ので、気にしないでください:)私の結果には影響しません –

答えて

1

(私はEntity Frameworkの中であなたがcanonical entity functionsでそれらを使用することができ、知りませんが、私は知りません約nhibernate3はそれらを修正するかもしれません、ちょうどあなたのアクションのラッパーを作成することができます:)

+0

はい、私はすでに回避策を行っていました。私はまず、DBからすべての結果を選択します(幸いなことに、この場合は多くありません)。そして結果リストを私のタイムスタンプ基準に対して再クエリします。 –

0

実際の例外を投稿したのであればいいですが、.TotalDaysはSQLにマップされていないと思います。

サーバーサイドのLINQクエリを記述するときには、すべての操作を明示的に対象とするもののSQL呼び出しに変換できないことに注意してください。。あなたがproduct.Expiration.Value - DateTime.Nowを行うことができないとnhibernate2linqでこの機能がサポートされていないため、また、あなたが(product.Expiration.Value - DateTime.Now).TotalDaysを行うことはできません

+0

更新されました。多分私は5日間のTimeSpanでtotaldaysプロパティを変更することができました..... –

0

直接DateTimeの呼び出しの代わりに変数を使用してみてください。それはエラーの原因になる可能性があります。

0

私は同じ問題があります。これは、この作品は

and session2_.LCSE_END_DATE >= '26.02.YYYY 09:34:12' 
and session2_.LCSE_BEGIN_DATE <= '26.02.YYYY 09:34:12') 

それは彼が正しく変換できないことのように思えるに変換されることを、私が見つけた何NHibernateは3.0クエリ

.Where(c => c.EndDate.Value >= DateTime.Now && c.BeginDate.Value <= DateTime.Now) 

上で、私のLINQの作品ですDateTime.Now !バグかもしれない?

0

Hallo NHibernate Linqとは関係がないようですが、実際に私の問題が見つかりました。 NHibernateのプロファイラは、最後に、私はそれがNhibernateProfilerのバグであると仮定DB

and session2_.LCSE_END_DATE >= '26.02.YYYY 09:34:12' 
and session2_.LCSE_BEGIN_DATE <= '26.02.YYYY 09:34:12') 

上で実行される次のクエリを示したので、私は、混乱してしまいました。

+0

です。また、ミラノで最近出会った開発者の一人が私に語ったように、** complete ** NHibernate to LINQプロバイダは決して存在しないという事実です –

関連する問題