Я пытаюсь выполнить поиск с LINQ to NHibernate.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.
ошибка происходит внутри исходного кода NHibernate в строке 33 в файле «Linq \ NHLinqExpression.cs»
_expression = PartialEvaluatingExpressionTreeVisitor.EvaluateIndependentSubtrees(expression);
Эта ошибка на самом деле происходит от повторного библиотеки LINQ.
Одним из очевидных способов решения является просто написать 3 заявления if и поместить соответствующие запросы LINQ в каждый из них, но это означает, что вы должны писать намного больше кода.
Есть ли способ сделать этот вид работы без копирования вставки всего запроса и изменения его чуть-чуть?
P.S.
Это внутреннее исключение:
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 => истинная же проблема – Para
@Para: Вы попробовали мою альтернативную формулировку? Если вы попытались заменить '1 == 1' на' true', прежде чем публиковать свой вопрос, было бы неплохо, если бы вы упомянули об этом. –
тоже попробовал это (я попробовал другой, даже после публикации, поэтому я упомянул об этом), так что теперь я попробовал оба из них, оба приводят к ошибке – Para