1

wcf riaでSilverlight 5を使用してシステムの開発を開始しています。Visual Studio 2010 を使用しており、コードは Visual Basic です。私のアプリケーションには table がありますguiasidiomas。これは非常に単純な表です。

  • ID
  • イドギア
  • イディディオーマ

getguiasidiomasアプリケーションで、ドメイン サービスによって生成されるクエリを変更しました

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

特定のidguiaでフィルタリングするために、whereを挿入しました。それが問題のあるクエリです。あなたが私を助けることができれば、私はとても感謝しています. クエリを実行すると、次のようになります。

SCRIPT5022: Silverlight アプリケーション コードの未処理エラー: 4004
カテゴリ: ManagedRuntimeError
メッセージ: System.ServiceModel.DomainServices.Client.DomainOperationException: クエリ 'GetGuiasIdiomas' の読み込み操作が失敗しました。LINQ to Entities はメソッド 'System.String ToString()' メソッドを認識せず、このメソッドはストア式に変換できません。

4

2 に答える 2

1

.ToString()Linq-to-Entities はSQL に直接変換できないため、WHERE句では使用できません。次の 2 つのオプションがあります。

  1. idProcuradoと同じデータ型に変換してidGuia直接比較
  2. データベースからすべてのエンティティを取得し (たとえば、 を呼び出し.AsEnumerable()て)、オブジェクト リストと比較します。

1) は、1 つまたは少数のエンティティをプルバックするだけでパフォーマンスが向上すると思います。

于 2012-11-09T19:12:18.410 に答える
0

エラー メッセージが示すように、エンティティへの linq は をサポートしていませんToString。エンティティへのlinqで使用する前に、文字列のリストを準備できます。

于 2012-11-09T19:07:13.073 に答える