Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQtoSQL能否生成包含ISNULL函数的TSQL?_C#_Linq To Sql - Fatal编程技术网

C# LINQtoSQL能否生成包含ISNULL函数的TSQL?

C# 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

我想知道是否有人确切地知道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>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));
    }
}
这是我的第三张照片


并且将生成带有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();