运算符“ &&”不能应用于布尔和布尔吗?

时间:2018-07-03 06:24:06

标签: c# linq

示例查询

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吗?

4 个答案:

答案 0 :(得分:3)

这里的问题是如果您这样写

somelist?.contains(t.id)在某些列表为null且null不是布尔值的情况下返回null。

所以您应该尝试这样

  &&  (somelist!=null ? somelist.contains(t.id) : false)

检查:3 misuses of ?. operator in C# 6

答案 1 :(得分:2)

您的错误是由于

bool b1 = true;
bool? b2 = true;
bool result = b1 && b2; //b2 could also be null

有两种方法可以解决此问题。

1

bool result = b1 && b2 == true;  // somelist?.contains() == true

2

在运行查询之前,请确保您的项目不能为空(这也适用于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)) 

如果某列表不为空,也应该工作