gpt4 book ai didi

c# - 嵌套数组的动态 Lambda 条件

转载 作者:太空宇宙 更新时间:2023-11-03 13:13:06 24 4
gpt4 key购买 nike

我想在一个包含字符串[]数组的集合中执行动态 Lambda:

public class ClassStudentsViewModel
{
public string[] Disciplines { get; set; }
public TeacherName { get; set; }
}

这就是我正在尝试的:

enter image description here

sourceClassStudentsViewModel 的集合,values 是一个包含一个字符串的字符串数组。执行时,它抛出这个异常:

No property or field 'y' exists in type 'String'

经过一番搜索,我找到了this question这几乎是同一个问题,OP 结束了 更改 Dynamic.cs 的源代码,这对我来说不是一个好的选择。我想知道我正在尝试的内容不受支持或可能是错误。问题是上面提到的问题几乎是 4 年前提出的。

下面的代码片段效果很好:

classStudents.AsQueryable().Where(x => x.Disciplines.Any(y => y == "Turma 2")).ToList();

我怎样才能摆脱这个错误?

更新:

关于我正在尝试的一些上下文:我的 Controller 接收到一个 viewModel,其中包含由第 3 方网格发送的过滤器集合,其中基本上包含一个和一个运算符,如 eqgt 等...一个方法循环所有这些过滤器并在 lambda 运算符上进行转换,如 eq ==contains.Contains()。在像 TeacherName(上面更新的 viewModel)这样的简单字符串属性中,动态过滤器起作用,例如如果屏幕截图中的 predicate 是:"TeacherName.Contains(@0)" 它运行良好。

更新 2:

此代码生成谓词:

public static string ToLambdaOperator(string field, string oper, int index, string sufix = null)
{
var result = String.Empty;

switch (oper)
{
case "eq":
case "neq":
case "gte":
case "gt":
case "lte":
case "lt":
result = string.Format(field + ToLinqOperator(oper) + "@" + index);
break;

case "startswith":
result = field + ".StartsWith(" + "@" + index + ")";
break;

case "endswith":
result = field + ".EndsWith(" + "@" + index + ")";
break;

case "contains":
result = field + ".Contains(" + "@" + index + ")";
break;

case "doesnotcontain":
result = "!" + field + ".Contains(" + "@" + index + ") || " + field + ".Equals(String.Empty)";
break;
}

if (!String.IsNullOrEmpty(sufix))
{
result += sufix;
}

return result;
}

// Use example
var operator = "eq";
var paramCounter = -1;
var predicate = ToLambdaOperator("Disciplines.Any(y => y", operator, ++paramCounter, ")");

上面的谓词将产生:Disciplines.Any(y => y == @0)。使用运算符 contains 将产生以下结果:Disciplines.Any(y => y.Contains(@0))

最佳答案

我认为您要做的是根据提供的参数生成一个表达式树。以下是有关如何执行此操作的一些示例。

https://gist.github.com/afreeland/6733381

How to: Use Expression Trees to Build Dynamic Queries (C# and Visual Basic)

关于c# - 嵌套数组的动态 Lambda 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27620089/

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