LINQ - LINQ to SQL 与 LINQPad 的不同结果

标签 linq linq-to-sql linqpad

我使用 LINQ to SQL 和 LINQPad 执行“相同”查询,但结果集略有不同。

代码是

var conn = new SqliteConnection (
            "DbLinqProvider=Sqlite;" + 
            "Data Source=/home/larsenma/database.golden"
        );

Models.Main db = new Models.Main (conn);

var runSum =
  from rr in db.Runrecords
  group rr by rr.RunID into rg          
  select new 
  {
    LaneCount = rg.Count(),
  }

LINQPad 正确计算“LaneCount”,而使用 LINQ to SQL,每条记录得到 1 秒。

对于 LINQ to SQL,我使用 sqlmetal 生成 DBLinq 的映射,对于 LINQPad,我使用 IQ 驱动程序。我的数据库是 SQLite。

我对 LINQ 东西还很陌生,有什么想法我哪里出错了吗?

编辑

我已将查询简化为极简的可重现实例。当我调试生成的 SQL 时,我得到

SELECT (SELECT COUNT(*))
FROM runrecords
GROUP BY RunID

这是第二个“COUNT(*)”丢失的东西。

谢谢。

最佳答案

听起来您正在使用 DBLinq,而不是 LINQ to SQL。 sqlmetal 工具生成实体类和类型化的 DataContext - 但是,如果您使用 DBLinq,那么实际上是 DBLinq 将 LINQ 转换为 SQL。

当我上次查看 DBLinq 时(一两年前),它相当原始,甚至在一些基本查询上都失败了。 LINQPad的IQ驱动使用Matt Warren's IQueryable toolkit这可能是可用于将 LINQ 转换为 SQL 的最复杂的与提供者无关的引擎。另一个优秀的引擎是 DevArt 的 LINQ Connect 库 - 最近它已经取得了长足的进步,并且还支持 SQLite。

现在我正在更新 IQ 驱动程序以支持 Oracle,并且还计划发布对 IQueryable 库本身的一些增强功能。为什么不尝试使用这个库或 DevArt 的库。

关于LINQ - LINQ to SQL 与 LINQPad 的不同结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5873048/

相关文章:

c# - 在 C# 中使用 linq to sql 更新数据库记录

linq - 使用 IQ 驱动程序在 LINQPAD 中查询多个 Oracle 模式

c# - 如何比较日期时间(仅 dd/mm/yyyy hh :mm:ss tt not whole fff section in datetime) in linq C#?

C# 解析 XML 文件

c# - LINQ to SQL 实体列名称属性被 guid 主键忽略

c# - 按 Bars 数选择最受欢迎的 Foo

ASP.net 4.0 实体数据模型 Mysql 未正确处理 Mysql 枚举

c# - 方法链接等效?

c# - LINQPad的IL代码是优化版吗?

linqpad - 如何将动态文本显示添加到输出面板?