我试图使用三元运算符来检查值是否为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);
答案 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);