【问题标题】:EF 4.1 Eager loading first 5 child records is it possible?EF 4.1 渴望加载前 5 个子记录是否可能?
【发布时间】:2011-06-18 05:08:46
【问题描述】:

使用 EF 4.1 我有一个模型(有相关购买的客户),我想创建一个简短的概览页面,显示客户及其最近 5 次购买。有没有一种方法可以使用 EF 4.1 创建搜索,我会说所有名称为“bret”的客户并使用急切加载来仅加载他们最近 5 次购买?我了解 ef 4.1 支持使用 include 进行预加载,但您可以通过 order by 指定限制吗?

【问题讨论】:

  • 我认为这不可能。它必须通过对子查询进行分区来创建复杂的查询。

标签: c# entity-framework ef-code-first eager-loading


【解决方案1】:

不,您不能为急切加载指定限制。您只能在显式加载单个客户时执行此操作:

var customer = context.Customers.Where(c => c.Id == customerId);
context.Entry(customer)
       .Collection(c => c.Purchases)
       .Query()
       .OrderByDescending(p => p.Date)
       .Take(5)
       .Load();

如果您想在单个查询中为多个客户执行此操作,则必须使用投影:

var query = context.Customers
                   .Select(c => new {
                        Customer = c,
                        Purchases = c.Purchases.OrderByDescending(p => p.Date).Take(5)
                    });

请注意,您必须投影到自定义或匿名类型。您不能投射回Customer 类。

【讨论】:

  • 使用 ef 4.1 我尝试使用投影和匿名类型进行查询,但出现以下错误。 "不支持指定的方法。"
猜你喜欢
  • 2011-07-19
  • 1970-01-01
  • 2017-06-06
  • 2013-05-06
  • 1970-01-01
  • 1970-01-01
  • 2013-02-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多