c# - 在 LINQ 查询中使用表达式
问题描述
我有一个Expression
可以是任何值的。例如,它可能是() => 5 + 5
. 如果在 中找到值,我将如何使用它Expression
来搜索 aList<int>
以返回?我想做的是给我一个表达式,我正在检查一个列表以查看表达式的值是否在列表中true
List<int>
private int FindRecord(System.Linq.Expressions.Expression expression)
{
// expression when stepping through in debug is {() => 5 + 5}
List<int> list = new List<int>();
list.Add(5);
list.Add(10);
return list.Any(expression); // syntax issue - cannot convert from Expression to Func<int,bool>
}
解决方案
编辑:我误解了这个问题,所以这是我的新答案:
private bool FindRecord(System.Linq.Expressions.Expression<Func<int>> expression)
{
int valueToSearch = expression.Compile()();
List<int> list = new List<int>();
list.Add(5);
list.Add(10);
return list.Any(i => i == valueToSearch); // syntax issue - cannot convert from Expression to Func<int,bool>
}
- 您的函数的返回类型应该是“bool”(任何返回 bool,而不是 int)。
- 参数类型“表达式”不够准确,应该说是函数返回整数的表达式。
- 您需要编译此表达式才能“运行”它并获得实际值。
推荐阅读
- powershell - 用于设置计划任务的脚本需要 Powershell 或批处理文件帮助
- c++ - 检查代理是否在 Qt 中可用的最佳方法是什么?
- tkinter - Tkinter 动态创建和删除按钮
- javascript - 将字符串转换为 Float32Array 的最快方法
- node.js - 使用 SSL 在 GCP 上连接到 postgresql 时出错
- javascript - JavaScript 输出字符串而不是未定义?
- floating-point - 八度音阶与 printf 的舍入不一致
- ios - 并发请求中的证书固定 Swift
- windows - 如何在 Windows 中清除控制台
- html - 为什么