在LINQ中,可以安全地在可空列上执行不等式测试而不必转换可空类型?在LINQ中使用可空列测试不等式在LINQ中使用LINQ
在T-SQL中,您必须使用ISNULL()。 但在LINQ可以放心我做?:
mytable.nullablecol != 1
在LINQ中,可以安全地在可空列上执行不等式测试而不必转换可空类型?在LINQ中使用可空列测试不等式在LINQ中使用LINQ
在T-SQL中,您必须使用ISNULL()。 但在LINQ可以放心我做?:
mytable.nullablecol != 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 ...;
编译时安全吗?是。
您可能不打算使用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
下,您可能遇到编译查询遇到编译麻烦。编译查询无法检查其参数并调整翻译。在这种情况下,您必须为每个案例编制一个编译查询(两个查询为一个可空参数)并将您的参数指向正确的案例查询。
一个具体的例子会很好... – 2012-07-12 09:26:38