我正在尝试使用Linq和Entity Framework实现某些功能。我想要达到的目标与这个问题完全相同:
LINQ: dot notation equivalent for JOIN
在我的情况下,虽然我想加载客户和相关的发票,但只加载某些发票,而不是所有发票。
我试图在上面的链接中实现给定的答案,但我的发票是空的。
public IEnumerable<Customer> GetAllCustomers()
{
List<Customer> customers;
using (var context = new EfContext())
{
customers = context.Customers.Join
(
context.Invoices,
c => c.Id,
i => i.CustomerId, (c, i) => new { c, i }
).Where(z => z.i.Id > 3)
.Select(z => z.c).ToList();
}
return customers;
}
这似乎有效,只需要仔细检查一下:
public Customer GetCustomer(int id)
{
Customer customer;
using (var context = new EfContext())
{
customer = context.Customers.Where(c => c.Id == id)
.Select(c => new
{
c,
Invoices = c.Invoices.Where(i => i.Id > 0 && i.Lines.Any(li => li.Item == "Bacon"))
.ToList().Select(z => new { z, Lines = z.Lines.Where(l => l.Item == "Bacon")}).ToList()
})
.ToList()
.Select(x => x.c)
.FirstOrDefault();
}
return customer;
}
答案 0 :(得分:0)
这可能与实体&#34; load&#34;的问题。
当您使用实体框架时,您可以将其配置为在每个查询中加载所有相关实体(例如,当您查询客户并查找相关发票时,也可以将其带入,并且如果您不这样做,您可以告诉他明确地执行此操作39;我希望他默认这样做。)
检查此article并确定是否需要急切\ lazy \ explicit loading: