我之前看过whereIn实现。 但我想知道是否有人可以让我写一个操作“WhereAnyIn”。
例如: 我有一个实体: Post --- PostTag --- Tag
我需要一个带参数int [] tagids的查询,其中获取所有在给定中具有tagid的帖子 列表。
我无法理解。
感谢您的帮助。
答案 0 :(得分:1)
static void Main(string[] args)
{
int[] integers = Enumerable.Range(0, 10).ToArray();
Expression<Func<Post, bool>> expression = CreateWhereInExpression<Post, int>(p => p.Tag, integers);
}
static Expression<Func<TItem, bool>> CreateWhereInExpression<TItem, TValue>(Expression<Func<TItem, TValue>> lambda, TValue[] items)
{
if (lambda != null)
{
MemberExpression memberExpression = lambda.Body as MemberExpression;
if (memberExpression != null && memberExpression.Expression == lambda.Parameters[0])
{
Expression body;
if (items == null || items.Length == 0)
{
body = Expression.Constant(
true
);
}
else
{
body = items.Skip(1).Aggregate(
Expression.Equal(
memberExpression,
Expression.Constant(items[0])
),
(expression, item) => Expression.OrElse(
expression,
Expression.Equal(
memberExpression,
Expression.Constant(
item
)
)
)
);
}
return Expression.Lambda<Func<TItem, bool>>(
body,
lambda.Parameters
);
}
}
return null;
}