LINQ to SQL查询中的自定义方法

gru*_*ber 3 c# linq linq-to-sql

是否可以使用自定义方法在查询中例如:

var result = from u in context.MyTable where MyMethod(u) == 10 select u;
Run Code Online (Sandbox Code Playgroud)

Tom*_*cek 8

正如Pranay所解释的那样,您不能将自定义(C#)方法作为LINQ to SQL查询的一部分,因为LINQ to SQL无法查看方法的表达式树,因此无法将其转换为SQL.

您有一个选择是在SQL中编写函数并将其作为SQL函数存储在SQL Server上(可能,您也可以使用SQL CLR,但我还没有尝试过).然后,您可以将函数添加到您的DataContext类型,LINQ to SQL将它转换为对SQL服务器上的函数的调用.就像是:

var result = from u in context.MyTable 
             where context.MyMethod(u) == 10 select u; 
Run Code Online (Sandbox Code Playgroud)

当然,问题是你需要在SQL中编写函数(我认为SQL CLR也可以工作 - 不确定性能和其他可能的复杂性)

我还写了一篇文章(前一段时间),它说明当你将"方法"作为表达式方式(作为类型的值Expression<Func<...>>)编写时,如何做到这一点,这是可能的,因为在这种情况下,代码被编译为表达树.但是,必须完成一些后处理,您仍然可以只编写一个可以在LINQ查询中轻松内联的表达式.