EF 4.1急切地加载前5个子记录是可能的

本文关键字:记录 5个 加载 EF | 更新日期: 2023-09-27 17:59:32

使用EF 4.1,我有一个模型(有关联购买的客户),我想创建一个简短的概述页面,显示客户及其最近5次购买。有没有一种方法可以使用EF 4.1创建搜索,比如说所有名为"bret"的客户,并使用热切加载只加载他们最近5次购买的商品?我知道ef 4.1支持使用include进行紧急加载,但你能指定订单的限制吗?

EF 4.1急切地加载前5个子记录是可能的

不,您不能为热切加载指定限制。您只能在单个客户的显式加载中完成:

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类。