gpt4 book ai didi

linq-to-sql - 针对 LINQ To SQL 查询中的位字段评估 bool 值

转载 作者:行者123 更新时间:2023-12-04 15:27:29 27 4
gpt4 key购买 nike

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

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

问题在于 IsTrue属性是 bit数据库中的字段(CLR 中的 bool)。当它转到 CE 中的 SQL 时,我得到 SELECT ... WHERE ([t0].IsTrue = 1).. 1 值是 SqlCe 的整数,默认情况下不会强制转换。

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

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

我试过:
  • item.IsTrue == Convert.ToBoolean(1)
  • item.IsTrue == Convert.ToBoolean("true")
  • item.IsTrue == (bool)true)

  • 希望让表达式树在其中进行转换,以便在 LINQ To SQL 中转换为转换,但我似乎找不到方法。有任何想法吗?

    最佳答案

    我登陆此页面是因为我遇到了同样的问题。

    我发现您可以通过使用编译查询来解决这个特殊的问题。使用您的示例:

    DataContext context = /* ... */;

    Func <DataContext, IQueryable<ItemType> compiledQuery = null;

    compiledQuery = CompiledQuery.Compile(
    (DataContext ctx) => (from item in Items
    where item.IsTrue
    select item)
    );

    var result = compiledQuery(context);

    如果您查看生成的 SQL(通过连接 DataContext 中的日志流),出于某种原因,它会在使用未编译查询的情况下做正确的事情。您的索引具有 bool他们中的 s 将开始工作。

    关于linq-to-sql - 针对 LINQ To SQL 查询中的位字段评估 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3681931/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com