NHibernateにLINQで検索しようとしています。Linq to nhibernate sql 1 = 1相当の
私はこのコードを持っている:
from d in rep.QueryAll<Document>()
where
d.Plata != null && d.Contractant != null && d.Stadiu == StadiuDocument.Polita
&& (d.NrPolita.Contains(query) ||
d.Contractant.CodUnic.Contains(query) ||
d.Contractant.Denumire.Contains(query) ||
d.Plata.IdTranzactie.Contains(query)) &&
((TipPolita != null) ? (d.Tip == (TipProdus)TipPolita) : (1 == 1)) &&
((StareDocument != null) ? (d.Stare == (StareDocument)StareDocument) : (1 == 1))
select new
{
問題は、私は一般的な値を持っているいくつかの選択入力を持っているということです。
<select id="tippolita" >
<option value = "-1">Any value</option>
<option value = "1">Value 1</option>
<option value = "2">Value 2</option>
<option value = "3">Value 3</option>
</select>
「任意の値」が選択された場合、私はここに書いたようなのでwhere
文が真でなければなりません:
((TipPolita != null) ? (d.Tip == (TipProdus)TipPolita) : (1 == 1)) &&
((StareDocument != null) ? (d.Stare == (StareDocument)StareDocument) : (1 == 1))
これは、ほとんど私はSQLで記述したものと同じである。このような何か
エラーは、このエラーは、実際に再LINQライブラリから来て
_expression = PartialEvaluatingExpressionTreeVisitor.EvaluateIndependentSubtrees(expression);
ファイルの行33でNHibernateのソースコード内で「LINQの\ NHLinqExpression.cs」を発生します。
明らかな回避策の1つは、3つのif文を記述し、それぞれに適切なLINQクエリを入れることですが、それはより多くのコードを書くことを意味します。
クエリ全体をコピーして貼り付けずに少しだけ変更するだけで、このようなクエリを実行する方法はありますか?
P.S.
これは、内部例外である:「私はそれかどうかわからない
(TipPolita == null || d.Tip == (TipProdus)TipPolita) &&
(StareDocument == null || d.Stare == (StareDocument)StareDocument)
として
((TipPolita != null) ? (d.Tip == (TipProdus)TipPolita) : (1 == 1)) &&
((StareDocument != null) ? (d.Stare == (StareDocument)StareDocument) : (1 == 1))
:
InnerException: System.NullReferenceException
Message=Object reference not set to an instance of an object.
Source=Anonymously Hosted DynamicMethods Assembly
StackTrace:
at lambda_method(Closure
)
は1 ==を試してみました1 => true同じ問題 – Para
@Para:代替案を試しましたか?あなたの質問を投稿する前に '1 == 1'を' true'に置き換えようとしたなら、あなたがそれを言いました。 –
これもやってみました(私は他のものも試してみましたので、私はそれをbeofreと言いました)、両方とも試してみましたが、どちらもエラーになります – Para