C# LINQtoSQL能否生成包含ISNULL函数的TSQL?
我想知道是否有人确切地知道LINQtoSQL是否能够生成包含ISNULL函数的TSQL代码 我知道使用合并操作符??在查询中: 从表中的o开始 奥菲尔德在哪里??0 > 0 选择o 将导致LINQ to SQL发出合并函数: 选择[t0]。[字段] 从[表]到[t0] 其中COALESCE[t0].[Field],0>0 使用条件运算符?:在查询中: 从表中的o开始 其中o.Field==null?0:o.字段>0 选择o 将导致TSQL包含CASE语句: 选择[t0]。[字段] 从[表]到[t0] 哪里 案例 当[t0].[Field]为空时,则为0 其他[t0].[金额] 结束>0 但是,是否可以强制LINQ to SQL生成包含ISNULL的TSQL代码,如下所示 选择[t0]。[字段] 从[表]到[t0] 其中ISNULL[t0].[Field],0>0C# LINQtoSQL能否生成包含ISNULL函数的TSQL?,c#,linq-to-sql,C#,Linq To Sql,我想知道是否有人确切地知道LINQtoSQL是否能够生成包含ISNULL函数的TSQL代码 我知道使用合并操作符??在查询中: 从表中的o开始 奥菲尔德在哪里??0 > 0 选择o 将导致LINQ to SQL发出合并函数: 选择[t0]。[字段] 从[表]到[t0] 其中COALESCE[t0].[Field],0>0 使用条件运算符?:在查询中: 从表中的o开始 其中o.Field==null?0:o.字段>0 选择o 将导致TSQL包含CASE语句: 选择[t0]。[字段] 从[表]到[t
我打赌答案是否定的,不可能,但我希望看到一些权威性的东西。我知道实现这一点的唯一方法是通过你自己的课程,比如:
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));
}
}
这是我的第三张照片
并且将生成带有ISNULL的T-SQL。我一直认为ISNULL和COALESCE是等价的,除了可能的参数数量
不过,我刚刚发现,问题是:这些差异对您来说重要吗?@dbaseman您链接的Q看起来与我的问题无关。我的问题完全是能够说“是”,您可以编写一个LINQ to SQL查询,该查询将发出包含ISNULL函数的TSQL,或者“否”,您不能。因此,查询行为的差异对我来说并不重要。我希望看到一些不需要向生成的DataContext添加方法的东西,但我认为不存在这种情况。
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();