2011-03-10 79 views
3

我有點頭痛,爲這個特定問題尋找解決方案。 所以在這裏,它是: 可以說我有3個表:只返回部分對象圖的實體框架查詢

  • 客戶
  • 訂單
  • 產品

我想要檢索的客戶名單和他們的一些過濾訂單某些客戶和訂單「字段並返回僅顯示每個實體的基本信息的圖表。
例如,一個客戶可以有19個字段,但我只想讀取它的ID,名字,姓氏和訂單,我只想讀取NetPrice和相關產品ID,當迭代發生在查詢,生成的SQL非常輕量級,只會選擇那些特定的字段。
是可以實現的東西嗎?如果是這樣,怎麼樣?我很困惑如何做到這一點。
非常感謝。

編輯: 好吧,我已經設法做到了,男孩現在快! 我是這樣做的:

var customers = (from customer in Context.Cutomers 
       select new 
       { 
        customer.ID, 
        customer.FirstName, 
        customer.LastName, 
        Orders = customer.Orders.Select(order => new 
        { 
         order.ID, 
         order.NetPrice, 
         Products = order.Products.Select(product => new 
         { 
          product.ID 
         } 
        } 
       }) 
       .AsEnumerable() 
       .Select(c => new Customer 
       { 
        c.ID, 
        //In my case, this is VERY important as it will 
        //try to convert from IEnumerable<T> to ICollection<T> 
        //which seems to need to be explicit. 
        Orders = c.Orders as ICollection<Order> 
       }) 
       .ToList(); 

編輯#2: 我錯了......它編譯罰款,一切似乎是工作,但我的產品都是空的...... 我又難住了。 ..

回答

0

您可以使用投影(無論是匿名還是準備類型)。我沒有嘗試,但我認爲這樣的想法應該工作:

var query = from c in context.Customers 
      select new 
       { 
       c.Id, 
       c.FirstName, 
       c.LastName, 
       Orders = c.Orders.Select(o => 
        new OrderPartial 
        { 
         NetPrice = o.NetPrice, 
         ProductIds = o.Products.Select(p => p.Id) 
        }) 
       };