Silverlight アプリで LINQ to Entities を使用しているときに、テーブルの主キーでクエリが生成されると、次のようになります。
var query = (from b in PHOTOS
where b.RECORDID == selectedRecordId
select b);
このように見えますhttp://localhost/DataService.svc/PHOTOS('123456')。これは、(驚くべきことに) PK 制約を適用していない古い DB で同じコードを使用する必要があるまでは問題ありません。結果として、1 つのレコードが返され、その後にエラーが続きます。
<error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
  <code></code>
  <message xml:lang="en-US">An error occurred while processing this request.</message>
  <innererror>
    <message>A single resource was expected for the result, but multiple resources were found.</message>
    <type>System.InvalidOperationException</type>
    <stacktrace>   at System.Data.Services.Serializers.Serializer.WriteRequest(IEnumerator queryResults, Boolean hasMoved)
   at System.Data.Services.ResponseBodyWriter.Write(Stream stream)</stacktrace>
  </innererror>
</error>
クエリを次のように手で書き直すと、この問題はなくなりますhttp://localhost/DataService.svc/PHOTOS()?$filter=RECORDID eq '123456'。括弧内の PK の代わりに $filter を強制的に使用するように LINQ コードを作成するにはどうすればよいですか? このテーブルのすべての結果が必要なので、最初の結果を取得するだけでは機能しません。