int id = 1;
string[] employerNos = null;
var query = from y in mydb.myTable
where y.ID == id
&& (employerNos == null ? true : employerNos.Contains(y.EmpNo))
select y;
var result = query.ToList();
字符串数组为null所以我认为该语句应该为true。我不知道它为什么会抛出System.NotSupportedException。
答案 0 :(得分:2)
因为您的查询不是LINQ to Objects,所以您的LINQ查询提供程序必须将条件语句的两个部分都转换为正确的SQL代码。
不要在查询中包含条件,而是将其取出:
int id = 1;
string[] employerNos = null;
var query = mydb.MyTable.Where(y => y.ID == id)
if(employerNos != null)
query = query.Where(y => employerNos.Contains(y.EmpNo))
var result = query.ToList();
答案 1 :(得分:1)
它正在尝试将该表达式转换为SQL。我认为问题在于你不能将字符串列表作为参数传递。
所以
var query = from y in mydb.myTable
where y.ID == id
&& employerNos.Contains(y.EmpNo))
select y;
会转换为类似
的内容select * from myTable
where ID=@ID
and EmpNo in ('1','3','5') -- employerNos evaluated before translation to sql
但是,如果您使用null检查尝试查询,则会得到类似
的内容select * from myTable
where ID=@ID
and (@list is null
or EmpNo in @list) -- this bit is not valid SQL
你可以这样做。
var query =
from y in mydb.myTable
where y.ID == id
select y;
if (employerNos != null)
query = query.Where(y => employerNos.Contains(y.EmpNo))