表达式<Func <T,布尔>> VS Func <T,布尔>

Jam*_*mes 1 c# linq expression

我刚刚遇到了Expression树,我发现使用LINQ比使用它更好Func<T, Boolean>.但是,我发现我无法直接将Expression传递给LINQ方法,让我们说Select方法.但是我发现有一种Compile与Expression相关联的方法可以将其转换为法线Func.现在我一直在想,是否正确地调用Expression(通过使用Compile方法),如果是这样,那么a Func和a之间的区别是什么Expression.如果它不是正确的方法,那么如何使用它,例如传递这个:

Expression<Func<T, Bool>> Test
Run Code Online (Sandbox Code Playgroud)

Data.Where(Test) --> Test can't be passed to it directly 
Run Code Online (Sandbox Code Playgroud)

Chr*_*man 6

使用Expressionvs Func实际上取决于您的用例以及您正在使用的Linq提供程序.

如果您正在使用Entity Framework,Linq to SQL或任何其他查询提供程序将表达式树转换为其他查询语言,那么您必须使用Expression.

如果您使用Linq to Objects,那么您可以选择.通常你想Func直接使用,而不首先创建一个表达式然后编译它.

可以使用,Expression如果您正在执行的操作需要在运行时构建任意和复杂的查询.在这种情况下,您将compile在执行查询之前调用.通常的例子是用户通过UI提供复杂的搜索查询.

  • @PermaFrost我很确定使用带有Entity Framework的表达式树是该库值的90%.如果没有EF检查lambda的表达式树,从lambda到SQL的转换是行不通的.它不是一些利基功能. (2认同)