안녕에 조건의 LINQ 표현 곳 엔티티 아이
어떻게 SQL로 번역하기 위해 LINQ 식을 통해 문 다음 구축 할 수?
builder.Where(e => e.SomeChild.Name.ToLower() == "something");
builder
은 DbContext입니다.
_property = e => e.Name;
...
builder.Where(insensitiveEqualityPredicate("whatever"));
그러나 :
private readonly Expression<Func<TEntity, TProperty>> _property;
private Expression<Func<TEntity, bool>> insensitiveEqualityPredicate(string formula)
{
var parameter = Expression.Parameter(typeof(TEntity));
var property = (PropertyInfo)((MemberExpression)_property.Body).Member;
var propertyParameter = Expression.Parameter(property.DeclaringType);
var lowerExpression = Expression.Call(
Expression.Invoke(_property, propertyParameter),
typeof(string).GetMethods().Where(m => m.Name == "ToLower" && m.GetParameters().ToList().Count == 0).FirstOrDefault()
);
return Expression.Lambda<Func<TEntity, bool>>(
Expression.Equal(
lowerExpression,
Expression.Constant(formula.ToLower(), typeof(string))
),
parameter
);
}
그것은 매력처럼 작동 : 내가 직접 호출 할 때, 그래서이 방법을 WHERE 조건을 구축이
select ... from someTable
inner join childTable on ...
where LOWER(childTable.Name) = @someParam
처럼 올바르게 해석 있어요 어린이 조건 :
_property = e => e.SomeChild.Name;
...
builder.Where(insensitiveEqualityPredicate("whatever"));
때문에 :
The LINQ expression 'Param_0.Name.Equal("whatever")' could not be translated and will be evaluated locally.
올바른 방법은 무엇입니까?
미리 감사드립니다. 나의 이해함으로써
_property'''같은 전자 => e.SomeChilld.Name' 정확한 => e.Name' 또는'예를 발현 보유 ? –
네, 맞습니다. 나는 명확하게 그것을 편집 할 것입니다 – rudolfdobias