我正在使用LINQPad和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“,而使用LINQPad,我为每条记录得到1s。
使用LINQPad,我使用SQL为DBLinq生成映射,使用LINQPad使用IQ驱动程序。我的数据库是SQLite。
我对LINQ很陌生,有什么想法我错了吗?
编辑
我已经将我的查询简化为简约的可再现实例。在调试生成的SQL时,将获得
SELECT (SELECT COUNT(*))
FROM runrecords
GROUP BY RunID这是第二个“计数(*)”正在丢失的东西。
谢谢。
发布于 2011-05-04 01:16:44
听起来您使用的是DBLinq,而不是LINQ。SQL金属工具生成实体类和类型化的DataContext -但是如果您使用DBLinq,那么实际上将LINQ转换为SQL的是DBLinq。
当我上次看DBLinq (一年或两年前)时,它相当原始,甚至在一些基本的查询上也不起作用。LINQPad的IQ驱动程序使用马特·沃伦的IQueryable工具包,它可能是用于将LINQ转换为SQL的最复杂的提供者无关引擎。另一个很好的引擎是DevArt的LINQ库--这在最近的时间里已经取得了很大的进展,并且还支持SQLite。
现在,我正在更新IQ驱动程序以支持甲骨文,并计划发布对IQueryable库本身的一些增强。你为什么不尝试使用这个或DevArt的库。
https://stackoverflow.com/questions/5873048
复制相似问题