2

ODATA Web サービスで LINQ を使用しています

from tp in TyrePatterns
from t in tp.Tyres
where t.Diameter == 195
select tp

単純に思えますよね?タイヤは TyrePatterns のプロパティです。ですから、私が何をしたいのかを確実に理解できるようにするために、SQL の魔法の世界で私が行っていることは次のようになります。

SELECT DISTINCT TyrePatterns.Name
FROM TyrePatterns
INNER JOIN Tyres ON Tyres.TyreID = TyrePatterns.TyreID
WHERE Tyres.Diameter = 195

私たちのサイトと LINQPad では、LINQ コードで実行時エラーが発生します。

System.NotSupportedException: 変換中のクエリの最後のエンティティ タイプのみを投影できます。

このエラーが実際に何を意味するかについての洞察と、解決策はすばらしいでしょう。

4

1 に答える 1

2

ODataでは、2つのテーブルの結合は次の2つの方法で実行できます。ナビゲーション、次のようになります。あなたが探しているものではないようです)

または拡張:/ TyrePatterns?$ expand = Tiresただし、フィルターを適用できるのはTyrePatternsのみであり、拡張されたタイヤには適用できません。

したがって、このクエリを実行する正しい方法は逆です。/ Tires?$ filter = Diagram eq 195&$ expand = TyrePatternこれにより、Diameter 195のすべてのタイヤが返され、TypePatternも含まれます(ナビゲーションプロパティがbiであると仮定) -方向性。それはあなたが望んでいたものではありませんが、あなたが得ることができる最も近いものです。

LINQに変換すると、これは次のようになります

from t in Tyres.Expand("TyrePatterns") where t.Diameter == 195 select t

その後、クライアントでTyrePatternsだけを簡単に選択できます。

制限は、ナビゲーションの最後のセグメント(URLのパス部分)にのみフィルターを適用できることです。

于 2010-09-16T08:57:29.310 に答える