使用三元运算符检查null-null引用是否与null不同

时间:2012-12-04 10:10:55

标签: c# linq tsql asp.net-mvc-4

我试图使用三元运算符来检查值是否为null并返回一个表达式或另一个表达式。将此结合到LINQ表达式中时我遇到的是LINQ表达式的Transact-SQL转换尝试执行“column = null”而不是“列IS NULL”。我有理由相信这是因为我正在做以下事情:

mappedColumnName == (myVar == null ? null : myOtherVar)

由于它在Transact-SQL中将以下内容转换为columnName IS NULL:

mappedColumnName == null

有没有人有这方面的经验?我非常想让这个工作起来。

整个LINQ表达式:

(from MenuItem in menuContext.Menus
   where MenuItem.IsSysAdmin == (ClientID == 1 ? true : false)
   && MenuItem.IsActive == true
   && MenuItem.ParentMenuCode == (ActiveSubMenu==null?null:ActiveMenu)
   && MenuItem.ClientID == (UseClientMenu ? ClientID : 0)
   && MenuItem.EmployeeID == (UseEmployeeMenu ? EmployeeID : 0)
   orderby MenuItem.SortOrder, MenuItem.MenuName
   select MenuItem);

3 个答案:

答案 0 :(得分:3)

为什么不使用

mappedColumnName == (myVar == null ? DBNull.Value: myOtherVar)

代替?

答案 1 :(得分:1)

我从未尝试过在linq中使用三元运算符,尽管你可以把它写成:

(
    (myVar == null && mappedColumnName == null      ) ||
    (myVar != null && mappedColumnNmae == myOtherVar)
)

答案 2 :(得分:0)

试试这个

(from MenuItem in menuContext.Menus
   where MenuItem.IsSysAdmin == ((ClientID == 1 )? true : false)
   && MenuItem.IsActive == true
   && MenuItem.ParentMenuCode == ( (ActiveSubMenu==null) ?null:ActiveMenu)
   && MenuItem.ClientID == (UseClientMenu ? ClientID : 0)
   && MenuItem.EmployeeID == (UseEmployeeMenu ? EmployeeID : 0)
   orderby MenuItem.SortOrder, MenuItem.MenuName
   select MenuItem);