【问题标题】:How can I get LINQ to SQL to use IS NULL when querying with a null variable?使用空变量查询时,如何让 LINQ to SQL 使用 IS NULL?
【发布时间】:2011-04-03 01:10:50
【问题描述】:

很抱歉,如果以前有人问过这个问题,但我查看了相关问题,但找不到与我的情况有关的任何内容。

我有一个看起来像这样的查询。

var tempFoo = "";
var foo = tempFoo != "" ? tempFoo : null;

var result = Entities.Where(x => x.Bar == foo);

Bar 是一个 string 和一个可为空的 varchar

问题是当foonull时LINQ to SQL生成的SQL是:

([t0].[Bar] = @p0)

应该在哪里:

([t0].[Bar] IS NULL)

如果我在表达式 LINQ to SQL 中将foo 替换为null,则使用正确的IS NULL 语法。然而,有时foo 不为空,所以我必须使用一个变量。

那么当foonull=foo 不是null 时,我怎样才能让LINQ to SQL 使用IS NULL

PS:奇怪的变量赋值的原因是因为tempFoo 引用了一个命名的正则表达式捕获。如果捕获为空,则值为"",因此我必须检查空值并分配null

谢谢!

【问题讨论】:

标签: c# linq linq-to-sql


【解决方案1】:

【讨论】:

  • 谢谢!我真的认为会有比使用两种不同的表达方式更优雅的方式,但是哦,好吧!
  • 链接已失效,上面提到的另一个问题没有解决我的问题。我可以从上面的评论和下面的答案中收集到的最好的答案是需要两个不同的 LINQ 语句——一个如果“foo”为空,另一个如果“foo”不是。
【解决方案2】:

作为Dan发布的链接,您可以使用:
var result = Entities.Where(x => ((foo == null && x.Bar == null) || (x.Bar == foo));

它对我有用!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    相关资源
    最近更新 更多