EF 4.1 Eager加载前5个子记录是否可能?

时间:2011-06-18 05:08:47

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

使用EF 4.1我有一个模型(有相关购买的客户),我想创建一个简短的概述页面,显示客户及其最近5次购买。有没有办法使用EF 4.1创建搜索,我会说所有名称为'bret的客户并使用急切加载仅加载他们最近的5次购买?我理解,ef 4.1支持使用include进行预先加载,但是你可以通过命令指定限制吗?

1 个答案:

答案 0 :(得分:3)

不,您无法指定eager loadig的限制。您只能在单个客户的显式加载中执行此操作:

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课程。