2011-03-10 68 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) 
        }) 
       };