gpt4 book ai didi

c# - 在字符串数组中查找 Any 方法

转载 作者:行者123 更新时间:2023-11-30 12:11:01 26 4
gpt4 key购买 nike

给定

string[] stringArray = { "test1", "test2", "test3" };

然后返回真:

bool doesContain = stringArray.Any(s => "testa test2 testc".Contains(s));

我的最终目标是用它制作一个 linq 表达式树。问题是如何获取"Any" 的方法信息?以下不起作用,因为它返回 null。

MethodInfo info = typeof(string[]).GetMethod("Any", BindingFlags.Static | BindingFlags.Public);

进一步说明:

我正在创建搜索功能。我使用 EF,到目前为止,我使用 linq 表达式树来创建动态 lambda 表达式树。在这种情况下,我有一个字符串数组,其中的任何字符串都应该出现在描述字段中。进入 Where 子句的工作 lambda 表达式是:

c => stringArray.Any(s => c.Description.Contains(s));

因此,为了制作 lambda 表达式的主体,我需要调用 "Any"

最终代码:

感谢 I4V 的回答,创建这部分表达式树现在看起来像这样(并且有效):

//stringArray.Any(s => c.Description.Contains(s));
if (!String.IsNullOrEmpty(example.Description))
{
string[] stringArray = example.Description.Split(' '); //split on spaces
ParameterExpression stringExpression = Expression.Parameter(typeof(string), "s");
Expression[] argumentArray = new Expression[] { stringExpression };

Expression containsExpression = Expression.Call(
Expression.Property(parameterExpression, "Description"),
typeof(string).GetMethod("Contains"),
argumentArray);

Expression lambda = Expression.Lambda(containsExpression, stringExpression);

Expression descriptionExpression = Expression.Call(
null,
typeof(Enumerable)
.GetMethods()
.Where(m => m.Name == "Any")
.First(m => m.GetParameters().Count() == 2)
.MakeGenericMethod(typeof(string)),
Expression.Constant(stringArray),
lambda);}

然后 descriptionExpression 进入更大的 lambda 表达式树。

最佳答案

你也可以这样做

// You cannot assign method group to an implicitly-typed local variable,
// but since you know you want to operate on strings, you can fill that in here:
Func<IEnumerable<string>, Func<string,bool>, bool> mi = Enumerable.Any;

mi.Invoke(new string[] { "a", "b" }, (Func<string,bool>)(x=>x=="a"))

如果您正在使用 Linq to Entities,您可能需要 IQueryable 重载:

Func<IQueryable<string>, Expression<Func<string,bool>>, bool> mi = Queryable.Any;

mi.Invoke(new string[] { "a", "b" }.AsQueryable(), (Expression<Func<string,bool>>)(x=>x=="b"));

关于c# - 在字符串数组中查找 Any 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16423312/

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