2012-11-09 41 views
1

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

  • 编号
  • Idguia
  • Ididioma

在我改变了由域服务

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

生成查询getguiasidiomas应用我插入了一个位置以便通过给定的idguia进行过滤。 这是有问题的查询。 如果你能帮助我,我将非常感激。 当我运行查询,我得到:

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

回答

0

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

1

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

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

我在猜测1)只打回一个或一小部分实体会给你更好的性能。