首页 > 解决方案 > 在 LINQ 查询中使用表达式

问题描述

我有一个Expression可以是任何值的。例如,它可能是() => 5 + 5. 如果在 中找到值,我将如何使用它Expression来搜索 aList<int>以返回?我想做的是给我一个表达式,我正在检查一个列表以查看表达式的值是否在列表中trueList<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>
    }

标签: c#linq

解决方案


编辑:我误解了这个问题,所以这是我的新答案:

    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)。
  • 参数类型“表达式”不够准确,应该说是函数返回整数的表达式。
  • 您需要编译此表达式才能“运行”它并获得实际值。

推荐阅读