0

現在、私はWCFDataServicesを試しています。ここで、オブジェクトツリーを取得するために、インクルードステートメントを使用してEF(サービスのデータソース)に類似したいくつかのオブジェクトについてServieにクエリを実行しようとしています。

私の声明は現時点では次のようになっています:

var query = this.Entities.Veranstaltung.Expand( "VeranstaltungMaterial/Material/Template" ).Expand( "Ort,Dozent" );

var k = query.Where( z => z.DauerTage > 5 && z.TemplateID == null );

LINQを介してExpandstatementを記述して、自動的に変換されるようにすることは可能ですか?

4

2 に答える 2

1

Expandあなたの質問は、WCF-DS固有のステートメントの代わりに通常のlinqステートメントを使用してナビゲーションプロパティにアクセスできるかどうかだと思います。もしそうなら、答えは「はい、できます」です。

もちろん、あなたの例を使用することはできませんが、Northwind ODataサービス1に接続すると、次のことができます。

Order_Details.Expand("Order/Customer").Expand("Product/Order_Details").Take (1)

また

Order_Details.Take(1).Select(o => 
                      new { o.Order.Customer, o.Product.Order_Details })

完全に同等ではありません(そしてほとんど役に立ちません)が、OKです。

URLには、2番目のステートメントも変換されていることがわかりますexpand


  1. http://services.odata.org/V3/Northwind/Northwind.svc/
于 2012-09-15T19:20:34.957 に答える
1

Gertの答えは正しいですが、それを拡張したかっただけです(そして、コメントに収めることはできません):LINQを使用するだけで、Expandを使用して最初のクエリでも表現できます。

Order_Details.Take(1).Select(od =>
    new Order_Detail
    {
        Order = new Order
        {
            Customer = od.Order.Customer
        },
        Product = new Product
        {
            Order_Details = od.Product.Order_Details
        },
    });

m:nの関係でも同様のトリックを行うことができます。このサンプルは1:nの関係に従いますが、反対方向からです。

Customers.Select(c =>
    new Customer
    {
        Orders = c.Orders.Select(o =>
            new Order
            {
                Order_Details = o.Order_Details
            });
    });

これは、〜/ Customers?$ expand = Orders / Order_Details&$ select = Orders/Order_Detailsと同等です。

于 2012-09-16T11:21:15.173 に答える