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

Mar*_*ark 2 linq linqpad linq-to-sql

我正在使用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(),
  }
Run Code Online (Sandbox Code Playgroud)

LINQPad正确计算"LaneCount",而使用LINQ to SQL时,每条记录获得1秒.

使用LINQ to SQL,我使用sqlmetal为DBLinq生成映射,并使用LINQPad作为IQ驱动程序.我的数据库是SQLite.

我对这个LINQ的东西很新,我出错的任何想法?

EDITS

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

SELECT (SELECT COUNT(*))
FROM runrecords
GROUP BY RunID
Run Code Online (Sandbox Code Playgroud)

这是第二个"COUNT(*)"缺少的东西.

谢谢.

Joe*_*ari 5

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

当我上次查看DBLinq(一年或两年前)时,它是相当原始的,甚至在一些基本查询上都没有.LINQPad的IQ驱动程序使用Matt Warren的IQueryable工具包,它可能是最复杂的提供程序无关的引擎,可用于将LINQ转换为SQL.另一个好的引擎是DevArt的LINQ Connect库 - 这在近期已经走过了漫长的道路并且还支持SQLite.

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