Oce*_*t20 0 .net c# linq linq-to-sql
简单地说,是什么让方法像SqlMethods.DateDiffDay工作一样?
方法签名如下所示:
public static int DateDiffDay(DateTime startDate, DateTime endDate);
Run Code Online (Sandbox Code Playgroud)
所以内部(或通过一些魔法外部)发生的事情使得这项工作:
var query = from a in db.TableA
group a by SqlMethods.DateDiffDay(a.Start, a.End) into g
select g.Key;
Run Code Online (Sandbox Code Playgroud)
...为什么将它隐藏在我自己的方法中会使它失败(不是我试图以任何理由这样做,只是试图更好地理解它):
var query = from a in db.TableA
group a by MyOwnDateDiffDay(DateTime startDate, DateTime endDate) into g
select g.Key;
public static int MyOwnDateDiffDay(DateTime startDate, DateTime endDate)
{
return SqlMethods.DateDiffDay(startDate, endDate);
}
Run Code Online (Sandbox Code Playgroud)
非常简单:在查看表达式树时,解析引擎是硬编码的,用于发现这些方法并在TSQL中以特定方式解释它们.它从来没有真正调用过这个方法 - 这就是为什么你的MyOwnDateDiffDay失败 - 它没有编程来发现MyOwnDateDiffDay.
您可以通过使用通常为L2S封装UDF 的代码在您自己的代码中做一小部分[Function(...)] - 例如,这是一种结束NEWID内置SQL-Server功能的厚颜无耻的方法:
partial class MyDataContext
{
[Function(Name="NEWID", IsComposable=true)]
public Guid Random()
{ // to prove not used by our C# code...
throw new NotImplementedException();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
611 次 |
| 最近记录: |