使用LINQ访问表中的第一个元素时出现SQLite错误
使用LINQ访问SQLite数据库时遇到以下问题。 Abreviated代码如下所示:
…
using System.Linq using System.Data.Linq using System.Data.Linq.Mapping using System.Data.SQLite
…
DataContext sqltContext= new DataContext(sqltConnection); featureTable = sqltContext.GetTable(); count= featureTable.Count(); // count == 1
以下行失败并显示错误:“SQL逻辑错误或缺少数据库\ r \ nnunknown错误”
//currentFeature = featureTable.First();
但迭代器工作正常:
foreach (var feature in featureTable) { currentFeature = feature; break; }
在这两种情况下,我在调试输出中收到以下错误:
SQLite error (1): near ".": syntax error
什么会导致这个错误? 我希望有人之前已经看过这个问题,并且可以指出我正确的方向。 但我可能最终会在调试器中逐步调试System.Data.SQLite代码。
编辑:基于GeorgeT下面的评论,我添加了sqltContext.Log = Console.Out;
。 根据日志记录输出,LINQ似乎正在生成SELECT TOP
命令,该命令与SQLite不兼容。 对此的解决方案似乎是避免使用First
或FirstOrDefault
方法,或者使用类似DBLinq的方法
调用.First()
方法使用SELECT TOP
命令生成SQL查询,该命令与SQLite不兼容。 解决方案是避免使用.First()
方法,或者使用支持SQLITE的LINQ查询的库,例如DbLinq或LinqConnect 。
正如tdr的回答提到的那样.First()生成错误的SQL而无法使用。 我必须将结果转换为列表,然后在列表上使用.First()作为解决方法。 如果结果非常大,它将不会非常有效:
var item = featureTable.ToList().First();