0
EF v1은 "IN"을 지원하지 않으므로 엔터티를 확장하는 방법이 있는지 궁금해합니다. 따라서 " IN "연산자를 사용합니다.Entity Framework v1.0의 ESQL에서 T-SQL 로의 변환 방법
EF v1은 "IN"을 지원하지 않으므로 엔터티를 확장하는 방법이 있는지 궁금해합니다. 따라서 " IN "연산자를 사용합니다.Entity Framework v1.0의 ESQL에서 T-SQL 로의 변환 방법
다음은 MSDN 포럼에서 제공하는 솔루션입니다.
static Expression<Func<TElement, bool>> BuildContainsExpression<TElement, TValue>(
Expression<Func<TElement, TValue>> valueSelector, IEnumerable<TValue> values)
{
if (null == valueSelector) { throw new ArgumentNullException("valueSelector"); }
if (null == values) { throw new ArgumentNullException("values"); }
ParameterExpression p = valueSelector.Parameters.Single();
// p => valueSelector(p) == values[0] || valueSelector(p) == ...
if (!values.Any())
{
return e => false;
}
var equals = values.Select(value => (Expression)Expression.Equal(valueSelector.Body, Expression.Constant(value, typeof(TValue))));
var body = equals.Aggregate<Expression>((accumulate, equal) => Expression.Or(accumulate, equal));
return Expression.Lambda<Func<TElement, bool>>(body, p);
}
는 실제로 "또는"T-SQL을 생성으로 이것은 나를 위해 작동하지 않습니다
the thread for detailed answer
통해 이동하십시오하고 "목록"너무 큰 경우에 유래의 예외가 발생합니다 (예를 들어, 더 많은 것을 포함 표현식 트리가 너무 큽니다. 내가 원하는 것은 EF4에서와 같이 "IN"T-SQL을 생성하는 것입니다. –
@Kevin이 MSDN 링크를 수정했습니다. 스레드를 통해 이동하십시오. – Eranga