1
解決方法,當在一個表中的主鍵,產生的查詢:LINQ實體:雖然在Silverlight應用程序中使用LINQ實體需要查詢在主鍵
var query = (from b in PHOTOS
where b.RECORDID == selectedRecordId
select b);
它看起來像這樣http://localhost/DataService.svc/PHOTOS('123456')
。這是沒問題的,直到需要使用與舊數據庫(令人驚訝地)不強制實施PK約束的相同代碼。結果是一個返回的記錄緊隨其後的錯誤:
<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'
。我如何編寫LINQ代碼,以便強制它使用$ filter而不是PK中的括號?這個表格中的所有結果都是需要的,所以只抓取第一個結果是行不通的。
Upvote有效的解決方法,但我忽略了我的問題中的2個重要細節;上面編輯。具體而言,這不適用於異步Silverlight調用。 – jordanpg 2012-04-24 21:48:02
編輯了一些其他的想法。 – MCattle 2012-04-25 18:32:29
感謝您的補充想法。追加Where()不能解決問題,這並不令我感到意外,因爲我記得了解這兩種形式在功能上是完全相同的。顯然,修改模式也可以解決這個問題,但這不是一個選項。 – jordanpg 2012-04-25 22:26:34