示例查询
var users = (from t in T_Table
join x in X_Table on t.id equals x.id
where t.pid == x.pid
&& somelist.contains(t.id) //UNABLE TO APPLY somelist?.contains
select (new User(){name = t.user})).ToList();
我无法对某项列表进行空值检查。
它显示:
运算符'&&'不能应用于bool和bool吗?
答案 0 :(得分:3)
这里的问题是如果您这样写
somelist?.contains(t.id)
在某些列表为null
且null不是布尔值的情况下返回null。
所以您应该尝试这样
&& (somelist!=null ? somelist.contains(t.id) : false)
答案 1 :(得分:2)
您的错误是由于
bool b1 = true;
bool? b2 = true;
bool result = b1 && b2; //b2 could also be null
有两种方法可以解决此问题。
bool result = b1 && b2 == true; // somelist?.contains() == true
在运行查询之前,请确保您的项目不能为空(这也适用于linq2SQL),因此您的查询中不需要空条件运算符
if(somelist == null)
{
somelist = new List<yourType>();
}
答案 2 :(得分:0)
在访问包含项之前先检查某列表是否不为空。
var users = (from t in T_Table
join x in X_Table on t.id equals x.id
where t.pid == x.pid
&& somelist != null && somelist.contains(t.id) //UNABLE TO APPLY somelist?.contains
select (new User(){name = t.user})).ToList();
答案 3 :(得分:-1)
首先检查某列表是否有任何数据,如果某列表为null,则无法对某列表进行包含操作
或
Where(u => somelist.Contains(t.Id.Value))
如果某列表不为空,也应该工作