【问题标题】:Linq with entitiesLinq 与实体
【发布时间】:2012-11-10 03:12:18
【问题描述】:

我开始使用silverlight 5 和wcf ria 开发一个系统。我使用 Visual Studio 2010,代码在 Visual Basic 中。在我的应用程序中,我有一个表guiasidiomas。这是一个非常简单的表格:

  • 身份证
  • 伊德吉亚
  • 成语

在应用程序中,我更改了由域服务生成的查询 getguiasidiomas

Public Function GetGuiasIdiomas(ByVal idProcurado As String) AsIQueryable(Of GuiasIdioma)
    Return Me.ObjectContext.GuiasIdiomas.Where(Function(c) (c.idGuia).ToString = idProcurado)
End Function

我插入了一个 where 以便按给定的 idguia 进行过滤。 那就是有问题的查询。 如果你能帮助我,我将不胜感激。 当我运行查询时,我得到:

SCRIPT5022:Silverlight 应用程序中出现未处理的错误 代码:4004
类别:ManagedRuntimeError
消息:System.ServiceModel.DomainServices.Client.DomainOperationException:查询“GetGuiasIdiomas”的加载操作失败。 LINQ to Entities 无法识别方法“System.String ToString()”方法,并且该方法无法转换为存储表达式。

【问题讨论】:

    标签: wcf linq silverlight entities


    【解决方案1】:

    Linq-to-Entities 无法将 .ToString() 直接转换为 SQL,因此您不能在 WHERE 子句中使用它。这里有两个选项:

    1. idProcurado转换为与idGuia相同的数据类型并直接比较
    2. 从数据库中提取所有实体(例如,通过调用 .AsEnumerable())并与对象列表进行比较。

    我猜 1) 将通过仅拉回一个或少量实体来为您提供更好的性能。

    【讨论】:

      【解决方案2】:

      正如您的错误消息所述,linq to entity 不支持ToString。 您可以在将其与 linq to 实体一起使用之前准备字符串列表。

      【讨论】:

        猜你喜欢
        • 2017-07-07
        • 1970-01-01
        • 1970-01-01
        • 2011-03-25
        • 2010-09-05
        • 2020-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多