【发布时间】:2014-05-05 13:25:21
【问题描述】:
我写 whereIn 扩展方法:
public static IQueryable<T> WhereIn<T, TValue>(this IQueryable<T> query,
Expression<Func<T, TValue>> valueSelector,
IEnumerable<TValue> values)
{
return query.Where(BuildContainsExpression(valueSelector, values));
}
private 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();
TValue[] enumerable = values as TValue[] ?? values.ToArray();
if (!enumerable.Any())
{
return e => false;
}
IEnumerable<Expression> equals =
enumerable.Select(
value =>
(Expression) Expression.Equal(valueSelector.Body, Expression.Constant(value, typeof (TValue))));
Expression body = equals.Aggregate(Expression.Or);
return Expression.Lambda<Func<TElement, bool>>(body, p);
}
我可以这样称呼它:
List<int> paymentTypeIds;
IQueryable<Order> iq = Entity.Order.AsQueryable();
iq = iq.WhereIn(h => h.PaymentType.Id, paymentTypeIds);
但我想将另一个参数传递给我的WhereIn 代码。我想让它看起来像这样:
iq = iq.WhereIn(h => h.PaymentType.Id || h.Bank.Id, paymentTypeIds);
我该怎么做?
【问题讨论】:
标签: c# sql linq entity-framework linq-to-entities