我有以下课程:
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调用中?
目前我通过分别调用每个子对象来解决这个问题。