我创建了一个SQL服务器压缩数据库(MyDatabase.sdf),并用一些数据填充它。然后我运行了SQLMetal.exe并生成了一个linq到sql类(MyDatabase.mdf)
现在我正在尝试从一个表中选择相对简单的选择的所有记录,我得到错误:
“解析查询时出错。[令牌行号= 3,令牌行偏移= 67,令牌错误= MAX]”
这是我的选择代码:
public IEnumerable<Item> ListItems()
{
MyDatabase db_m = new MyDatabase("c:\mydatabase.sdf");
return this.db_m.TestTable.Select(test => new Item()
{
ID = test.ID,
Name = test.Name,
RequestData = test.RequestData != null ? test.RequestData.ToString() : null,
Url = new System.Uri(test.Uri)
}.AsEnumerable();
}
我已经读过Linq to SQL与Sql Compact一起使用,我还需要其他一些配置吗?
答案 0 :(得分:5)
它可能是一个错误的NVARCHAR(MAX)吗?我认为我之前在sql compact edition中看到过这样的错误,并且我记得它与sql compact edition不支持NVARCHAR(MAX)数据类型这一事实有关。这也可能是您在异常中看到“令牌错误= MAX”消息的原因吗?
答案 1 :(得分:0)
为什么需要在RequestData上进行转换?你的班级是什么样的?你能这样设置吗?
RequestData = test.RequestData
答案 2 :(得分:0)
我还试过在Winforms应用程序中为Linq-to-sql使用SQLMetal作为SQL Server紧凑版的方法 。 在遇到一些问题后,我跳过了Linq-to-SQL方法并采用了Linq-To-Entities方法。对于我正在这样做的查询,语法类似于99%; - )
此外,使用edmx设计器时,可以轻松更新,删除和添加表格。(在设计器中使用拖放或右键单击等效项。)