LINQ to SQL可以生成包含ISNULL函数的TSQL吗?
我想知道是否有人明确知道LINQ to SQL是否具有生成包含ISNULL
函数的TSQL代码的能力?
我知道在查询中使用coalesce运算符( ??
):
from o in Table where (o.Field ?? 0) > 0 select o
将导致LINQ to SQL发出COALESCE
函数:
SELECT [t0].[Field] FROM [Table] AS [t0] WHERE (COALESCE([t0].[Field],0)) > 0
并且,在查询中使用条件运算符( ?:
?
from o in Table where (o.Field == null ? 0 : o.Field) > 0 select o
将导致TSQL包含CASE
语句:
SELECT [t0].[Field] FROM [Table] AS [t0] WHERE ( (CASE WHEN [t0].[Field] IS NULL THEN 0 ELSE [t0].[Amount] END)) > 0
但是,LINQ to SQL是否可以强制生成包含ISNULL
TSQL代码,如下所示?
SELECT [t0].[Field] FROM [Table] AS [t0] WHERE (ISNULL([t0].[Field],0)) > 0
我打赌答案是“不,它不能”,但我希望看到一些权威的东西。
我知道完成此任务的唯一方法是通过您自己的类,如下所示:
public partial class LocalTestDataContext { [Function(Name = "IsNull", IsComposable = true)] [return: Parameter(DbType = "NVarChar(MAX)")] public string IsNull( [Parameter(Name = "field", DbType = "NVarChar(MAX)")] string field, [Parameter(Name = "output", DbType = "NVarChar(MAX)")] string output) { return ((string)(this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), field, output).ReturnValue)); } }
这是从这里 “Take#3”。
var ctx = new LocalTest.LocalTestDataContext(); var query = from c in ctx.Categories orderby ctx.IsNull(c.Description1, "") + ctx.IsNull(c.Description2, "") select c; query.Dump();
并将使用ISNULL()生成T-SQL。
除了可能的参数数量外,我一直认为ISNULL和COALESCE是等价的。
刚才发现存在差异 ,所以问题是:这些差异对你很重要吗?
上述就是C#学习教程:LINQ to SQL可以生成包含ISNULL函数的TSQL吗?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/936298.html