2

我正在尝试使用三元运算符来检查一个值是否为空并返回一个表达式或另一个。在将其合并到 LINQ 表达式中时,我遇到的是 LINQ 表达式的 Transact-SQL 翻译尝试执行“column = null”而不是“column 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);
4

3 回答 3

4

你为什么不使用

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

反而?

于 2012-12-04T11:09:20.957 回答
1

我实际上从未尝试在 linq 中使用三元运算符,尽管您可以将其写为:

(
    (myVar == null && mappedColumnName == null      ) ||
    (myVar != null && mappedColumnNmae == myOtherVar)
)
于 2012-12-04T10:17:49.773 回答
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);
于 2012-12-04T10:26:37.180 回答