父对象和子对象的集合

时间:2015-03-10 16:09:34

标签: c# linq linq-to-sql

说我有Customer班和Invoice班。 Customer包含名为List<Invoice>的{​​{1}}属性。这可以用一个Invoices语句填充吗?或者我是否需要先选择客户,然后对其进行Linq以便稍后提取发票?

类似的东西:

foreach

我无法在那里选择客户,或者内部列表没有填写。也许是(from customer in customers join invoice in invoices on customer.Id = invoice.CustomerId select <what>? 而已?

编辑:这有效。只是想知道是否有不同的方式

group

2 个答案:

答案 0 :(得分:0)

如果从数据库加载并尝试加载集合,则可以使用.Include()方法显式加载集合。如果在关闭数据库连接后尝试访问该集合,则会收到错误。

您应该使用以下内容:

using(var context = new ServiceContext())
{
  var customers = context.CustomerSet.Include(cust => cust.Invoices);
}

答案 1 :(得分:0)

这是不可能的。解决方法是使用let子句,如OP的编辑区域所示:

var customersWithInvoices =
   (from customer in customers
    let invoiceGroup = (from invoice in invoices where invoice.CustomerId == customer.Id select invoice).ToList()
    select new { customer, invoiceGroup }).ToList();

foreach (var obj in customersWithInvoices) {
   obj.customer.Invoices = obj.invoiceGroup;
   CustomerList.Add(obj.customer);
}