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,我得到每条记录15。

使用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的IQueryable工具包,该工具包可能是用于将LINQ转换为SQL的最复杂的与提供者无关的引擎。另一个不错的引擎是DevArt的LINQ Connect库,它在最近的一段时间里取得了长足的进步,并且还支持SQLite。

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

相关内容

  • 没有找到相关文章

最新更新