6

CustomMetaとPageContentsを結合して、設定されているメタデータを介して特定のページを選択しようとしていますが、「メソッド結合はサポートされていません」というエラーが発生します。ODataサービスに何かが送信される前にエラーが発生するため、問題は私のlinqステートメントにあると思います。しかし、問題は正確には何ですか?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

このTridionODataの記事には結合の例がありますが、私が読んでいるMS Linq to ODataの記事のいくつかは、Linq to ODataでは結合がサポートされていないことを示唆しているようです(ここ

4

2 に答える 2

6

私の知る限り、データサービス(OData)に対するLINQクエリはいくつかのメソッドをサポートしていません。使用しているjoinものも同じカテゴリに分類されるため、LINQの観点からは構文が非常に有効であるにもかかわらず、エラーが表示されます。join「射影およびフィルタリング演算子」に該当します。これは、ODataに対するLINQでのクエリではサポートされていません。

サポートされていないすべてのメソッドを説明するリンクは次のとおりです(セクション-サポートされていない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のフィルタータイプクエリを作成した可能性があります。

お役に立てれば。

于 2012-11-14T23:20:25.293 に答える
1

拡張の概念を使用してみましたか?

ODataサービスには結合クエリはありませんが、Expandキーワードがあり、外部キー関係を持つ2つのエンティティ(テーブル)を一緒に使用して結果セットを取得できます。次のように機能します。

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

ここでは、2番目のエンティティが最初のエンティティのプロパティとして公開されています。

于 2012-12-19T14:04:02.237 に答える