使用EF Projection内联集合

时间:2015-10-20 13:57:43

标签: entity-framework projection

我有以下课程:

public class Customer {
public int Id {get;set;}
public string Name {get;set;}
public List<Order> Orders {get;set;}
//other attributes
}

public class Order{
public int Id {get;set;}
public string Name {get;set;}
public decimal Value {get;set;}    
}

鉴于customerId,我希望仅使用EF中的投影选择客户名称和订单ID。 我正在做以下事情:

 IQueryable<Customer> customer = DataContextFactory.GetDataContext().Set<Customer>();

var tempCustomer = customer.Where(x => x.Id == customerId).Select( c=>
new 
{
Name = c.Name
}
)

这给了我客户名称。然后,我可以像这样传回实体:

var customerToReturn = tempCustomer.ToList().Select(x => new Customer
  { Name = x.Name});

如果我在查询中包含这样的订单:

var tempCustomer = customer.Where(x => x.Id == customerId).Select( c=>
new 
{
Name = c.Name,
Orders = new {
     Id = c.Orders.Id
     }
}
)

然后我按订单行获得了一个重复的客户(根据EF生成的SQL)。有没有办法可以将这一代内联到一个SQL调用中?

目前我通过分别调用每个子对象来解决这个问题。

0 个答案:

没有答案