使用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不兼容。 对此的解决方案似乎是避免使用FirstFirstOrDefault方法,或者使用类似DBLinq的方法

调用.First()方法使用SELECT TOP命令生成SQL查询,该命令与SQLite不兼容。 解决方案是避免使用.First()方法,或者使用支持SQLITE的LINQ查询的库,例如DbLinq或LinqConnect 。

正如tdr的回答提到的那样.First()生成错误的SQL而无法使用。 我必须将结果转换为列表,然后在列表上使用.First()作为解决方法。 如果结果非常大,它将不会非常有效:

 var item = featureTable.ToList().First();