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(*)"缺少的东西.
谢谢.
听起来你正在使用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的库.
| 归档时间: |
|
| 查看次数: |
951 次 |
| 最近记录: |