0

我有一个非常直接的查询,它在运行时产生了这个错误: String.Contains 方法只支持可以在客户端上评估的参数。

该查询应该只查找分配给它们的转移的类别。转移可以在多个类别中列出,因此没有表关系。Categoryidhash 包含类似“7~34~25~42~47”的数据。我刚刚意识到,在写这篇文章时,搜索“7”将返回多个结果,“7”和“47”等。没关系,我只需将 id 更改为所有两位数。同时...

我怎样才能解决这个问题?

    Private Function GetCategoryList() As List(Of Category)
    Dim lst As List(Of Category) = New List(Of Category)

    Using db As New IPCDataDataContext

        lst = (From c In db.Categories
              From t In db.Transfers
              Where t.CategoryIDhash.Contains(c.ID.ToString)
              Select c).ToList()
        Return lst
    End Using
End Function
4

1 回答 1

0

异常意味着Contains只接受可以在 SQL 中转换为固定变量的参数。所以类似的事情Where t.CategoryIDhash.Contains(someVariable.ToString)是可能的,因为someVariable.ToString可以在客户端进行评估。

我不太了解这个限制,因为在 SQL 中,完全可以使用LIKE带有内置在 SQL 语句本身中的字符串的子句。解决您的问题的语句证明了这一点:

lst = (From c In db.Categories
      From t In db.Transfers
      Where SqlMethods.Like(t.CategoryIDhash, "%" + c.ID.ToString "%")
      Select c).ToList()

这会生成(并执行)SQL

...
WHERE [t1].[CategoryIDhash] LIKE (@p0 + (CONVERT(NVarChar,[t0].[ID]))) + @p1

(其中@p0@p1%字符。

虽然你可以这样做,但我想知道你是否在正确的轨道上使用 this CategoryIDhash。我认为您应该将其转换为 FK 关系(如果您可以修改数据库)。

于 2013-07-13T22:20:19.000 回答