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

LINQ-LINQ to SQL与LINQPad的结果不同,linq,linq-to-sql,linqpad,Linq,Linq To Sql,Linqpad,我使用LINQtoSQL和LINQPad执行相同的查询,但是结果集略有不同 代码是 var conn = new SqliteConnection ( "DbLinqProvider=Sqlite;" + "Data Source=/home/larsenma/database.golden" ); Models.Main db = new Models.Main (conn); var runSum = from rr

我使用LINQtoSQL和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到SQL,我使用sqlmetal生成DBLinq的映射,使用LINQPad生成IQ驱动程序。我的数据库是SQLite

我对LINQ这个东西还不太熟悉,有没有什么想法我哪里出了问题

编辑

我已经将我的查询简化为最简单的可复制实例。当我调试生成的SQL时,我得到

SELECT (SELECT COUNT(*))
FROM runrecords
GROUP BY RunID
这是第二次计数,它遗漏了一些东西


谢谢。

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

当我在一两年前最后一次研究DBLinq时,它相当原始,甚至在一些基本查询上也出现了问题。LINQPad的IQ驱动程序使用可能是最复杂的供应商不可知引擎,用于将LINQ转换为SQL。另一个很好的引擎是DevArt的LinqConnect库,它在最近取得了长足的进步,还支持SQLite


现在,我正在更新IQ驱动程序以支持Oracle,并计划发布一些IQueryable库本身的增强功能。你为什么不试试使用这个或德瓦特的图书馆。

谢谢乔。你说得对。我没有意识到mono中包含的LINQ到SQL的实现是DBLinq。在我的问题中应该提到这一点。IQueryable工具包是开源的,所以您可以在Mono中成功编译它。让我知道你进展如何。