2010-11-22 5 views
0

テーブルOrderとOrderLinesがあります。私は、ef4 "include"を使ってOrderLinesをロードしています。残念ながら、OrderLinesは文字列として参照されるため、そのプロパティを公開することはできません。簡単に言えば、OrderLinesにプロパティとコストがある場合、これを参照できますか?例えば、このようなものが、私はできません実現:エンティティ・フレームワークに強く型付けされたものが含まれています4

  orders= from Orders o in 
         db.Orders.Include("OrderLines") 
         where o.OrderId == this.OrderId 
         select new() 
        { 
        o.cost 
        o.size 
        } 

ない場合は、どのように私はこれをacheiveでしょうか?

おかげ

ステュ

答えて

1

それは異なりますが、フィルタに単にOrderLinesかに基づいて、結果セットが必要な場合は、結果セットからアクセス。

var orders = ctx 
       .Orders 
       .Include("OrderLines") 
       .Where(x => x.OrderLines.Any(y => y.Cost >= 10.00 && y.Size == 5)) 
       .ToList(); // result is List<Orders> with OrderLines populated. 

はあなたがだけたい場合:OrderLines費用少なくとも$ 10.00と5の大きさは、あなたがこれを行うことができます(OrderLinesが含まれて)Ordersのリストを望んでいた場合

言って、 OrderLines、その後、プロジェクト注文ライン:

var orders = ctx 
       .Orders 
       .Include("OrderLines") 
       .Where(x => x.OrderLines.Any(y => y.Cost >= 10.00 && y.Size == 5)) 
       .Select(x => x.OrderLines) 
       .ToList(); // result is List<OrderLine> 

あなたの投影がwが、匿名型のリストを返していました2つの特性。あなたはこのように、強く型付けされたオブジェクトを引き戻す必要があります。

var orders = ctx 
       .Orders 
       .Include("OrderLines") 
       .ToList(); // result is List<Orders> with OrderLines populated 

さて、OrderLinesためにICollection<T>として公開されます。含めるよう

例えば

foreach (var order in orders) 
{ 
    Console.Write("Order Id: " + order.OrderId); 
    foreach (var orderLine in order.OrderLines) 
    { 
     Console.Write("Order Line: " + orderLine.OrderLineId); 
     Console.Write("Order Line Cost: " + orderLine.Cost); 
    } 
} 
+0

私の質問に完全に答えます。本当にありがとう。 Stu – hoakey

+0

喜んでお手伝いします。 :) – RPM1984

0

ザ受注ように設定されたオブジェクトのメソッドを含め、データが各注文インスタンスに関連付けられた注文ラインインスタンスが同時にフェッチされているように、「熱心な負荷」しようとしているとあなたはDBへの旅行を保存します。

取得した各OrderLineインスタンスは、スカラープロパティがすべて自動的に取得されるので、yes、cost、およびsize(スカラーと見なしています)が取得されます。今度は、OrderLineに、商品テーブルのOrderLine.Productという別のナビゲーションプロパティ(OrderLineのプロパティとして参照される別のエンティティ)がある場合、それは取得されません。あなたはオーダーラインのプロパティは、あなたができることを熱望し、負荷もしたい場合は、以下:

from Orders o in db.Orders 
        .Include("OrderLines") 
        .Include("OrderLines.Product") 
        where o.OrderId == this.OrderId 
        select new() 
       { 
       o.cost 
       o.size 
       } 
+1

実際にあなただけの最後を必要とするには、インクルードパス全体 –

+0

こんにちはジェームズをロードします。このようにOrderLinesの小道具を公開しようとすると、表示されません。オーダー小道具だけが公開されています。コストとサイズは、OrderLinesのスケーラ小道具です。 – hoakey

+0

Mikael、良い点 –

関連する問題