Я строй выражения LINQ в C# как это:LINQ выражения добавлять ненужные скобки
public static Expression BuildEqualsExpression(
ParameterExpression Parameter,
PropertyInfo Property,
ConstantExpression constant)
{
Expression propertyExpression = Expression.Property(Parameter, Property);
return Expression.Equal(propertyExpression, constant);
}
Возвращенного Выражение
(r.Property == constant)
когда то, что я хочу
r.Property == constant
без круглых скобок. Мой IQueryProvider
не относится к этим двум утверждениям одинаково. Кто-нибудь знает, как я могу избавиться от круглых скобок?
Если I AND
два из них вместе, я получаю
((r.Property1 == constant) And (r.Property2 == constant))
, когда я хочу
r.Property1 == constant And r.Property2 == constant
, так как они не являются эквивалентными предикаты.
Редактировать:
Благодарим за помощь. Оказывается, что в SQL сервере 2014, используя следующую команду:
OFFSET 0 ROWS FETCH NEXT 100 ROWS ONLY
Когда число действительных строк < 100, это заставит запрос выполнить крайне медленно.
Это просто строковое представление выражения, оно не меняет свой смысл. И да, два предиката * * эквивалентны. Ваш IQueryProvider работает над строковым представлением? –
Бэк-магазин моего IQueryProvider не относится к ним одинаково. Мне не нужны круглые скобки.Несмотря на то, что математически они эквивалентны, резервный магазин обрабатывает скобки как конкретную операцию = \ – Magn3s1um
@ Magn3s1um: При всем уважении это не имеет смысла. Какая операция выполняет скобки? –