gpt4 book ai didi

string - 在 Linq To Sql 中处理可为空字符串列的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-04 06:25:34 25 4
gpt4 key购买 nike

假设您有一个包含可为空 varchar 列的表。当您尝试过滤表时,您将使用(pFilter 是参数):

var filter = pFilter;
var dataContext = new DBDataContext();
var result = dataContext.MyTable.Where(x=>x.MyColumn == filter).ToList();

现在,如果有一个关键字表示“All Nulls”呢?代码如下所示:
var filter = pFilter != "[Nulls]" ? pFilter : null;
var dataContext = new DBDataContext();
var result = dataContext.MyTable.Where(x=>x.MyColumn == filter).ToList();

但这不起作用。显然,值为 null 的 String 是...不是 null?

但是,有效的是这段代码:
var filter = pFilter != "[Nulls]" ? pFilter : null;
var dataContext = new DBDataContext();
var result = dataContext.MyTable.Where(x=>x.MyColumn == filter || (filter == null && x.MyColumn == null)).ToList();

解决方法没有说服我,这就是为什么我的问题是:在 LinqToSql 中处理可为空字符串列的最佳方法是什么?

最佳答案

使用 String.Equals这将使 LINQ 在生成的 SQL 查询上适本地处理 null

var result = dataContext.MyTable
.Where(x => String.Equals(x.MyColumn, filter))
.ToList();

编辑:

如果您使用 == LINQ 将为一般情况生成查询 WHERE [column] = @parameter但是在 SQL NULL 与 NULL 不匹配时,测试 NULL 的正确方法是 [column] IS NULL .

String.Equals LINQ 有足够的信息在每种情况下将方法翻译成合适的句子,这意味着:

如果你传递一个非空字符串,它将是
WHERE ([column] IS NOT NULL) AND ([column] = @parameter)

如果它为空
WHERE [column] IS NULL

关于string - 在 Linq To Sql 中处理可为空字符串列的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6075979/

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