我有一个表 TableA 和子表 TableB。我想获取所有父表记录,但选择满足条件的子记录。我正在使用包含来获取子记录。
除了使用select new之外,还有什么直接的方法吗?
我有一个表 TableA 和子表 TableB。我想获取所有父表记录,但选择满足条件的子记录。我正在使用包含来获取子记录。
除了使用select new之外,还有什么直接的方法吗?
LINQ to SQL 有一个 LoadOptions,您可以在上下文中设置它来做一些强大的事情。大多数人指向 .LoadWith ,它急切地加载子记录。还有一个 AssociateWith 指定应用于惰性子提取的过滤。它们都可以采用 lambda 表达式进行子子过滤。这是一个例子:
var lo = new DataLoadOptions();
lo.AssociateWith<Customers>
(c => c.Orders.Where(o => !o.ShippedDate.HasValue));
this.LoadOptions=lo;
var query = from c in Customers
select c.Orders;
请注意,这只适用于 LINQ to SQL。EF 目前不支持这种行为。
using (var context = new DbEntities()) {
foreach (var p in context.Parents) {
var childQuery = from c in p.Children
where c.whatever == something
select c;
// Do something with the items in childQuery, like add them to a List<Child>,
// or maybe a Dictionary<Parent,List<Child>>
}
}