2

三項演算子を使用して、値が null であるかどうかを確認し、いずれかの式を返そうとしています。これを LINQ 式に組み込むときに私が経験しているのは、LINQ 式の Transact-SQL 変換が「列 IS NULL」ではなく「列 = 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 に答える