实体框架查询仅返回部分对象图

时间:2011-03-10 21:41:24

标签: entity-framework graph entity partial

我有点头疼找到解决这个特殊问题的方法。 所以这里是: 可以说我有3张桌子:

  • 客户
  • 订单
  • 产品

我希望通过对某些客户和订单字段进行一些过滤来检索客户及其订单的列表,并返回仅显示每个实体的基本信息的图表。
例如,一个客户可能有19个字段,但我只想读取它的ID,FirstName,LastName,并且从订单中,我只想读取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:编辑#2: 我错了......它汇编得很好,一切似乎都在工作但是,我的产品是空的...... 我又难过了......

1 个答案:

答案 0 :(得分: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) 
                     })
              };