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)
使用Expressionvs Func实际上取决于您的用例以及您正在使用的Linq提供程序.
如果您正在使用Entity Framework,Linq to SQL或任何其他查询提供程序将表达式树转换为其他查询语言,那么您必须使用Expression.
如果您使用Linq to Objects,那么您可以选择.通常你想Func直接使用,而不首先创建一个表达式然后编译它.
您可以使用,Expression如果您正在执行的操作需要在运行时构建任意和复杂的查询.在这种情况下,您将compile在执行查询之前调用.通常的例子是用户通过UI提供复杂的搜索查询.