在LINQ To SQL查询中针对位字段计算布尔值

obs*_*sid 6 sql-server-ce linq-to-sql

我正在尝试针对SQL CE数据库执行简单的小LINQ To SQL查询.

var result = from item in items
             where item.IsTrue == true
             select item;
Run Code Online (Sandbox Code Playgroud)

问题是该IsTrue属性是bit数据库bool中的一个字段(在CLR中).当它进入CE中的SQL时,我得到SELECT ... WHERE ([t0].IsTrue = 1).. 1值是SqlCe的整数,它默认情况下不会抛出它.

我在该列上的索引(IsTrue列)未被使用.相反,它会尝试istrue将数据库中的所有值转换为整数,并将它们与1进行比较.

如何生成LINQ To SQL WHERE ([t0].IsTrue = Cast(1 as bit))...?我需要以某种方式强制将该值转换为a bit,从而允许使用索引?

我试过了:

  • item.IsTrue == Convert.ToBoolean(1)
  • item.IsTrue == Convert.ToBoolean("true")
  • item.IsTrue == (bool)true)

希望得到表达式树在其中有一个强制转换,以便它转换为LINQ To SQL中的强制转换,但我似乎无法找到方法.有任何想法吗?

Eri*_*ing 0

您是否尝试过省略该== true部分并仅使用

var result = from item in items where item.IsTrue select item;

或者,使用方法语法

var result = items.Where(item => item.IsTrue);