说我有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
答案 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);
}