gpt4 book ai didi

.net - 将 Linq where 条件添加到通用 IQueryable

转载 作者:行者123 更新时间:2023-12-03 03:02:01 25 4
gpt4 key购买 nike

基本上我想做的是:

var validValues = new List<int>() { 1, 2, 34 };

query = query.Where(item => validValues.Contains(item.Value));

除了我不知道它是什么类型,我想将其作为扩展方法:

public static IQueryable<T> Where<T>(this IQueryable<T> source, string propertyName, IList<int> accpetedValues)
{
if (accpetedValues == null || !accpetedValues.Any() || string.IsNullOrEmpty(propertyName))
return source;

// HERE

return source;
}

我找到了这篇文章IQueryable Extension: create lambda expression for querying a column for a keyword但这不是我想要的,我不知道如何使其适应我的情况......

最佳答案

它与链接的帖子类似,但是这次您需要动态构建 Expression<Func<T, bool>> 使用 Expression.Call 调用 Enumerable.Contains<int> 像这样:

public static IQueryable<T> Where<T>(this IQueryable<T> source, string propertyName, IList<int> accpetedValues)
{
if (accpetedValues == null || !accpetedValues.Any() || string.IsNullOrEmpty(propertyName))
return source;

var item = Expression.Parameter(typeof(T), "item");
var selector = Expression.PropertyOrField(item, propertyName);
var predicate = Expression.Lambda<Func<T, bool>>(
Expression.Call(typeof(Enumerable), "Contains", new[] { typeof(int) },
Expression.Constant(accpetedValues), selector),
item);
return source.Where(predicate);
}

关于.net - 将 Linq where 条件添加到通用 IQueryable<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36316142/

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