2012-07-12 74 views

回答

1

是的,它是安全的一轮这样做的。

编辑:鉴于您的意见,问题可能是null == -1结果为空,不是真实的(在SQL中)。当你想比较与可以为空值相等

mytable.nullablecol != 1 || mytable.nullablecol == null 

什么变得棘手的是:所以,你可以使用的查询。你必须明确地照顾它。例如:

int? x = GetId(); 
var query = from foo in bar 
      where foo.X == x || (foo.X == null && x == null) 
      select ...; 
+0

好的谢谢。只是在LINQPad中尝试过我的例子。它似乎会返回!= 1的所有行,但是它也会忽略具有空值的行吗?我有点希望它会返回null null = 1。 – jaffa 2012-07-12 09:35:11

+0

@jaffa:编辑...它很烦人,但很容易修复。 – 2012-07-12 10:05:52

+0

谢谢jon的帮助。 – jaffa 2012-07-12 14:02:09

1

编译时安全吗?是。

您可能不打算使用null比较筛选器行吗?是。它由数据库的规则在数据库中完成。

foo.X != -1 

此代码不会给你空X的。如果你想这些,你可以ISNULL这样的:

(foo.X ?? 0) != -1 

(foo.HasValue ? foo : 0) != -1 

关于 “=” 与 “是” 的查询翻译:

int? x = GetId(); 
var query = from foo in bar 
    where foo.X == x 
    select foo; 
//LinqToSql examines the x 
// you get an "is" comparison when x is null 
// you get an "=" comparison when x is not null 

下,您可能遇到编译查询遇到编译麻烦。编译查询无法检查其参数并调整翻译。在这种情况下,您必须为每个案例编制一个编译查询(两个查询为一个可空参数)并将您的参数指向正确的案例查询。