0

WCFサービスオペレーションがあります。オブジェクトの単純なリストではなく、オブジェクトグラフを返したいのですが。これを行うための魔法のLinQはありますか?

ありがとう

もう少し情報が必要になる可能性があります。

私にはいくつかのエンティティがあります:

StockableItem
+Id
+コード

在庫
+ID
+場所
+数量

StockableItem->Stockは1..*の関係です。

そして私はこのlinqで失敗しています:

from si in svc.StockableItems.Include( "Stock")
join s in svc.Stock on si.Id equals s.Id
where s.Location == 1 select si

といくつかのバリエーション。

サービスオペレーションが次のようなものを返すことができることを願っています:

StockableItem-ID = 213、Code = xxx
StockableItem-ID = 214、Code =xxx2
    +在庫-ID=214、Location = 1、Qty = 3
StockableItem-ID = 215、Code = xxx3
StockableItem-ID = 216、Code = xxx4
    +在庫-ID=216、場所= 1、数量= 6

つまり、指定された場所のStockエントリとともにすべてのStockableItemsを返します。それはほとんど左外側の結合です:

StockableItemsから*を選択します。si左外部
結合StocksON si.Id=s.Idおよびs.Location=@Location

しかし、オブジェクトグラフに変わりました。

4

2 に答える 2

1

上記のクエリから、あなたが何をしたいのか正確にはわかりません。WCF DSクライアントを使用すると、プロパティをドリルスルーするwhere句を追加できます。

from si in svc.StockableItems
where si.Stock.Location == 1
select si
// Results in something like http://services.odata.org/Experimental/OData/OData.svc/Products?$filter=Category/Name eq 'Beverages'

Expandメソッドを使用するか、プロジェクションに含めることで、明示的に熱心な読み込みを行うこともできます。

svc.StockableItems.Expand("Stock").Where(si => si.Stock.Location == 1) // OR
from si in svc.StockableItems
where si.Stock.Location == 1
select si, si.Stock
// Results in something like http://services.odata.org/Experimental/OData/OData.svc/Products?$filter=Category/Name eq 'Beverages'&$expand=Category
于 2012-07-17T16:23:17.453 に答える
1

完全に明確ではありません。理想的にはODataソリューションが必要なようです。ODataクエリから呼び出されたWCFデータサービスサービス操作からオブジェクトグラフを返すことはできません。オブジェクトのフラットリストを取得できますが、オブジェクトグラフを取得するには$expandを使用する必要があります。あなたの場合、$ expandは機能しません。それは、StockItemsがフィルターを通過したすべてのストックインスタンスを返します。

DBにビューを作成するのが最善の策だと思います(場所のテーブルがあると思いますか?)

    SELECT       si.Id, Locations.Location 
    FROM         StockableItem AS si  
    CROSS JOIN   Locations

エンティティモデルで、このビューをエンティティ(XXXと呼ばれる)として追加し、このビューとStockableItemおよびStockエンティティの間にナビゲーションプロパティを設定します。

これで、次のようなODataクエリを実行できます。

.../XXX?$expand=StockableItem,Stock&$filter=isof(Stock,'YourModelName.Stock') and Location eq 1

それはあなたが求めていた正確なオブジェクトグラフではありませんが、クライアント側でリンクを追加し始めたいのでなければ、それはあなたが得ようとしている最高のものです。

于 2012-09-20T13:32:28.453 に答える