Linq to sql Linq到SQL和SQL Server压缩错误:“0”;分析查询时出错。”;

Linq to sql Linq到SQL和SQL Server压缩错误:“0”;分析查询时出错。”;,linq-to-sql,sql-server-ce,Linq To Sql,Sql Server Ce,我创建了一个SQL server compact数据库(MyDatabase.sdf),并用一些数据填充它。然后我运行SQLMetal.exe并生成一个linq到sql类(MyDatabase.mdf) 现在,我尝试用一个相对简单的选择从表中选择所有记录,我得到了一个错误: 分析查询时出错。[令牌行编号=3,令牌行偏移量=67,令牌错误=MAX] 这是我的选择代码: public IEnumerable<Item> ListItems() { MyDatabase db_m

我创建了一个SQL server compact数据库(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();
}
public IEnumerable ListItems()
{
MyDatabase db_m=新的MyDatabase(“c:\MyDatabase.sdf”);
返回这个.db_m.TestTable.Select(test=>newitem()
{
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一起工作的文章,我还需要做其他配置吗?

这可能是一个错误的NVARCHAR(MAX)?我想我以前在SQL Compact edition中看到过类似的错误,我记得这与SQL Compact edition不支持NVARCHAR(MAX)这一事实有关数据类型。这也可能是您在异常中看到“token in error=MAX”消息的原因?

可能是错误的NVARCHAR(MAX)吗?我想我以前在sql compact edition中看到过类似的错误,我记得这与sql compact edition不支持NVARCHAR(MAX)这一事实有关数据类型。这也可能是您在异常中看到“token in error=MAX”消息的原因?

为什么需要对RequestData进行转换?您的类看起来像什么?您可以这样设置吗

    RequestData = test.RequestData  

为什么需要对RequestData进行转换?您的类是什么样子的?可以这样设置吗

    RequestData = test.RequestData  

我还尝试了在Winforms应用程序中使用SQLMetal作为SQL Server compact edition的方法,该应用程序用于Linq to SQL . 在遇到一些问题之后,我跳过了Linq到SQL的方法,转而使用Linq到实体的方法。对于查询的语法,我正在这样做;-)


此外,在使用edmx设计器时,可以轻松地更新、删除和添加表。(在设计器中使用拖放或右键单击等效项)。

我还尝试了在Winforms应用程序中使用SQLMetal作为SQL Server compact edition的方法,用于Linq to SQL . 在出现一些问题之后,我跳过了LINQtoSQL方法,转而使用LINQtoEntities方法。语法与查询的语法99%相同,我正在这样做;-)


此外,在使用edmx设计器时,可以轻松地更新、删除和添加表。(在设计器中使用拖放或右键单击等效项)。

您的代码被剪裁-无法告诉您要执行的操作。你能用完整的代码编辑吗?@Rob Conery-我添加了缺失的代码,但我不认为这是问题的一部分,因为我不认为代码不是生成的查询的一部分。哦,等等,我看到了问题。。。。正在检查是否测试。请求!=null在查询中创建一个case语句。我不知道这是怎么回事!如何将该测试从查询中移出?您的代码被剪裁了—不可能知道您正在尝试做什么。你能用完整的代码编辑吗?@Rob Conery-我添加了缺失的代码,但我不认为这是问题的一部分,因为我不认为代码不是生成的查询的一部分。哦,等等,我看到了问题。。。。正在检查是否测试。请求!=null在查询中创建一个case语句。我不知道这是怎么回事!我该如何将该测试移出查询?你说得太对了!test.RequestData.ToString()导致将转换(nvarchar(MAX),RequestData)插入SQL。在SQL CE数据库中,您会用什么替换nvarchar(MAX)?您说得太对了!test.RequestData.ToString()导致将转换(nvarchar(MAX),RequestData)插入SQL。在SQL CE数据库中,您将用什么替换nvarchar(MAX)?我的类使用字符串保存请求数据,而数据库使用图像。我正在将linq二进制数据转换为字符串。我不知道如何将转换逻辑移出linq代码,因为我不想让我的类知道任何linq数据类型。最后,我将数据库中的数据类型改为ntext而不是image。我的类使用string保存请求数据,而数据库使用image。我正在将linq二进制数据转换为字符串。我不知道如何将转换逻辑移出linq代码,因为我不想让我的类知道任何linq数据类型。最后,我将数据库中的数据类型改为ntext而不是image。