我正在尝试加入CustomMeta& PageContents通过已设置的某些元数据选择特定页面,但我得到“不支持方法连接”错误。我认为问题出在我的linq语句中,因为错误发生在将任何内容发送到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 to OData文章似乎暗示Linq到OData(here)不支持连接
答案 0 :(得分: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
回到你的问题,我不太了解你正在寻找什么,但我会尝试以下(你可能必须在多次迭代中得到结果):
_client.CustomMetas.Where (
m => m.KeyName == "somekey" && m.StringValue == "somevalue" && m.ItemType == 64)
.ToList();
希望这有帮助。
答案 1 :(得分:1)
您是否尝试过使用expand的概念?
在OData服务中,我们没有连接查询,但有Expand关键字,其中两个具有外键关系的实体(表)可以一起使用来获取结果集。它的工作原理如下:
from item in table1.Expand(table2).AsEnumerable()
where (item.property1.Equals("x") & item.table2[0].prop2.Equals("y"))
select item
此处,第二个实体作为第一个实体的属性公开。