2010-11-22 97 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 
        } 

如果不是,我會如何實現這一目標?

由於

斯圖

回答

1

這取決於如果你想過濾基礎上,OrderLines或者乾脆結果集從結果集中訪問。

說,如果你想要的Orders一個列表(OrderLines在內),其中OrderLines成本至少爲$ 10.00的大小5.你可以這樣做:

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,然後項目的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有兩個屬性。你需要給拉了回來強類型的對象,像這樣:現在

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

OrderLines將被暴露作爲每個秩序的ICollection<T>

E.g

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

的設定等的訂單的對象上包含方法是要「急切負載」的數據,使得與每個訂單實例相關聯的OrderLines實例是取在同一時間和節省您前往數據庫的次數。

檢索到的每個OrderLine實例都將自動檢索到它的所有標量屬性,所以是,成本和大小(我假設是標量)將被檢索。現在,如果OrderLine具有其他導航屬性(另一個實體作爲OrderLine上的屬性引用),例如來自Products表的OrderLine.Product,則不會檢索它。如果你也想躍躍欲試,載荷訂單行的屬性,你可以做到以下幾點:

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

其實你只需要最後包括爲包括將加載整個路徑 – 2010-11-22 20:03:59

+0

詹姆斯嗨。當我嘗試以這種方式公開OrderLines道具時,他們不會出現。只有訂單道具是暴露的。成本和尺寸是OrderLines的縮放器道具。 – hoakey 2010-11-22 20:09:59