gpt4 book ai didi

c# - LINQ to SQL 可以生成包含 ISNULL 函数的 TSQL 吗?

转载 作者:太空狗 更新时间:2023-10-29 23:25:07 24 4
gpt4 key购买 nike

我想知道是否有人明确知道 LINQ to SQL 是否能够生成包含 ISNULL 函数的 TSQL 代码?

我知道在查询中使用合并运算符 (??):

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));
}
}

这是来自 here 的“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。

关于c# - LINQ to SQL 可以生成包含 ISNULL 函数的 TSQL 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11044661/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com