不能隐式转换类型' bool?'到了布尔'在LinQ查询中?

时间:2014-11-13 16:13:31

标签: c# linq boolean

我的where语句明显失败,但我能找到的只是如何在LinQ查询之外转换它的示例。我能来的最近的是:

&& rdoNoPhone.Checked ? d.PHONE!= null : true

但是,我不太确定这在我的案例中是如何运作的。我理解我的SQL字段名为Active允许3个值,trues,false和null,我猜我的答案都在那个小问号上。

LinQtoSQLDataContext db = new LinQtoSQLDataContext();
                   var query = from a in db.Admins
                               where a.Active = true
                               orderby a.Name
                               select new { a.Name, a.LoginName};

我还应该问一下如何在LinQ查询中使用SQL IN语句。例如,将以下内容更改为LinQ:

Select Field1, Field2, Level
From Table
Where Level IN (1,2,5)

1 个答案:

答案 0 :(得分:4)

我相信你在where a.Active = true行中的等号实际上应该是两个相等的符号(表示比较而不是作业)。事实上,因为你将bool与true进行比较,所以你甚至不需要比较运算符。你可以写a.Active.Value

LinQtoSQLDataContext db = new LinQtoSQLDataContext();
                   var query = from a in db.Admins
                               where a.Active.HasValue && a.Active.Value
                               orderby a.Name
                               select new { a.Name, a.LoginName};

对于第二个问题,您可以使用Contains(value)来解决此问题。例如:

int[] Levels = new int[] { 1, 2, 5 };
int Level = 2;
if (Levels.Contains(Level))
{
    // Level was found in Levels
}