数据类型text和nvarchar在等于运算符中不兼容

Has*_*sen 8 c# asp.net-mvc linq-to-sql

这是我的代码

ProductController.cs

public ActionResult Details(string id)
{
    product productx = productDB.products.Single(pr => pr.Product1 == id);
    return View(productx);


}
Run Code Online (Sandbox Code Playgroud)

Details.aspx

    <td>
        <%-- : Html.ActionLink("Edit", "Edit", new { id=item.Id }) % --> 
        <%: Html.ActionLink("Details", "Details", new { id = item.Product1 })%>
    </td>
Run Code Online (Sandbox Code Playgroud)

这就是我用来列出sql数据库中的一些产品,每个产品都有一个指向详细信息页面的链接,以显示有关它的更多信息

我试图只是将产品标签放在该链接中,让它显示类似www.mysite.com\products\battery(不是id)

我认为这应该工作,但它抛出一个数据类型文本和nvarchar在等于运算符不兼容.错误,但都(pr => pr.Product1.Equals(id));不起作用

错误是明确的,我问我应该怎么做才能让它以这种方式工作?

谢谢

Aar*_*ght 26

SQL Server中的TEXT列被视为大对象数据,因此不可索引/可搜索.他们也被弃用了.实际上,问题出在您的数据库中,而不是在您的应用程序中.

如果将列类型更改为a varchar(max),则可以存储相同数量的字符数据,但不应出现此问题.然后,更新您的Linq to SQL实体,您将不再收到此特定错误.

说过......一个名字ID不应该是TEXT 或者 varchar(max),它应该是一个自动增量整数ID或一个GUID(uniqueidentifier),所以你可能想重新访问你的数据库设计.但假设您有充分理由将ID作为任意大小的字符串值,则上述更改将允许您对列进行过滤.