gpt4 book ai didi

c# - IEnumerable.contains(MemberExpression) 的动态 Linq 表达式

转载 作者:太空狗 更新时间:2023-10-29 21:04:58 26 4
gpt4 key购买 nike

我想使用 Linq 表达式树创建一个表达式来模拟这个:

List<int> ids = new List<int>();

// Fill ids with data

db.Where(a => ids.Contains(a.Id));

这是我得到的地方,但我仍然缺少一些东西:

MemberExpression me = Expression.Property(pe, typeof(T).GetProperty(property));

Expression callContains = Expression.Call(typeof(System.Linq.Enumerable), "Contains", new Type[] { me.Type }, me);

我怎样才能正确地做我想做的事?

最佳答案

因为 Contains 是一个扩展方法,您还必须提供 ids 集合作为参数,在本例中,作为 ConstantExpression.

您的实现可能略有不同,但看起来有点像这样:

public static IQueryable<T> DynamicContains<T, TProperty>(
this IQueryable<T> query,
string property,
IEnumerable<TProperty> items)
{
var pe = Expression.Parameter(typeof(T));
var me = Expression.Property(pe, property);
var ce = Expression.Constant(items);
var call = Expression.Call(typeof(Enumerable), "Contains", new[] { me.Type }, ce, me);
var lambda = Expression.Lambda<Func<T, bool>>(call, pe);
return query.Where(lambda);
}

db.DynamicContains("Id", ids);

关于c# - IEnumerable<int>.contains(MemberExpression) 的动态 Linq 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18491610/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com