2012-11-14 18 views
6

我正在嘗試加入CustomMeta & PageContents通過已設置的某些元數據來選擇特定頁面,但我得到一個「方法加入不支持「錯誤。我認爲這個問題與我的linq聲明有關,因爲錯誤發生在任何事情發送到OData服務之前。但究竟是什麼問題呢? LINQ的聲明看起來好像沒什麼問題:「方法加入不支持」使用Tridion OData服務&Linq

var pages2 = (from p in cds.PageContents 
    join m in cds.CustomMetas on p.PageId equals m.ItemId 
    where m.ItemType==64 && m.KeyName=="SomeKey" && m.StringValue=="SomeValue" 
    select p).ToList<SDLODataClient.SDLOData.PageContent>(); 

更新1

Tridion OData article具有的加入,但一些MS的LINQ到OData的文章中,我讀似乎表明,加入不爲例在Linq支持OData(here

回答

6

據我所知,針對數據服務(OData)的LINQ查詢不支持多種方法。您正在使用的是join也屬於同一類別,因此即使從LINQ的角度來看語法非常有效,您也會看到錯誤。 join屬於「Projection and filtering operators」,不支持LINQ對OData的查詢。

下面是解釋了所有的不支持的方法(參見部分 - 不支持LINQ方法)的鏈接

http://msdn.microsoft.com/en-us/library/ee622463(v=vs.100).aspx

回到你的問題,我倒不怎麼實現你在找什麼,但是我想嘗試以下(您可能必須得到多次重複的結果):

  • 獲取匹配的自定義元查詢頁面ID列表(示例代碼段 - 未測試)
_client.CustomMetas.Where (
m => m.KeyName == "somekey" && m.StringValue == "somevalue" && m.ItemType == 64) 
.ToList(); 
  • 現在你可以使用上面的頁面ID查詢頁面內容。您可能需要爲每個頁面ID構建過濾器類型查詢。

希望這會有所幫助。

+0

我連接的一篇文章顯示Tridion OData示例與連接投擲了我。這顯然需要在2個查詢中完成。謝謝。 –

1

您是否嘗試過使用擴展的概念?

在OData服務中,我們沒有連接查詢但存在Expand關鍵字,其中具有外鍵關係的兩個實體(表)可以一起使用以獲取結果集。它的工作原理如下:

from item in table1.Expand(table2).AsEnumerable() 
where (item.property1.Equals("x") & item.table2[0].prop2.Equals("y")) 
select item 

這裏第二個實體作爲第一個實體的屬性公開。

相關問題