2012-06-28 6 views
5

LINQPadを使用してローカルCRM組織のODATAサービスに接続していますが、LINQPadを使用して「結合」を実行する方法や関係をトラバースする方法がわかりません。LinqPadでODATA展開を実行する方法

は、ここに私のURLのブラウザで正常に動作します

OrganizationData.svc/New_locationSet?$select=new_state_new_location/new_Region$expand=new_state_new_location 

です。ここで私はLINQPadでやっているものです:

from l in new_locationSet 
from s in l.new_state_new_location 
select s.new_Region 

を私はエラーになっています:

An expression of type 'LINQPad.User.New_state' is not allowed in a subsequent from clause in a query expression with source type 'System.Data.Services.Client.DataServiceQuery<LINQPad.User.New_location>'. Type inference failed in the call to 'SelectMany'. 

任意のアイデア?私はあなたがちょうどあなたが例えば、展開したいものを投影する必要があります... LINQPadのODataのドキュメントが非常に不足し

答えて

7

を見つけた:

from p in Products 
select new {p.Name, CategoryName = p.Category.Name} 

または

Products.Select(p => new { p.Name, CategoryName = p.Category.Name}) 

が得られます
http://services.odata.org/(S(readwrite))/OData/OData.svc/Products()?$expand=Category&$select=Name,Category/Name 

LinqPadの[リクエストログ]タブ。

+0

基本的に、odataには単一のデータセットがあります。つまり、Odata.svc/Products()Categories()を実行することはできませんか... ...)、LINQクエリを単一の"from"データセットを選択し、投影を選択します。 odataにはすでにすべての関係が定義されているため、自動的に接続されます。 – Daryl

+1

ええ - それはかなり大丈夫です。 URLにはジョインはありません(ナビゲーションプロパティがあれば必要ないため)ので、クライアントサイドのLINQ to URLトランスレータはこれらのことについて非常に賢明にしようとしますが、ジョインをナビゲーションと認識するかもしれませんが、現在は非常に限られています(主に外部キーを知らない、または持っていないため)。 ODataをオブジェクトのグラフとして想像し、そのグラフ内で返すツリーを定義します。これは、テーブルを持ち、クエリが行列を定義するリレーショナルデータベースとはまったく異なります。 –

関連する問題