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

发布于 2024-11-15 19:14:16 字数 187 浏览 1 评论 0原文

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

Using EF 4.1 I have a model (customer with associated purchases) and I want to create a brief overview page showing customers and their last 5 purchases. Is there a way to create a search using EF 4.1 where I get say all customers with a name of 'bret and use eager loading to only load their last 5 purchases? I understand ef 4.1 supports eager loading using include but can you specify a limit with an order by?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

岁月如刀 2024-11-22 19:14:16

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

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

No you can't specify limit for eager loadig. You can do it only in explicit loading for single customer:

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

If you want to do it for multiple customers in single query you must use projection:

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

Be aware that you must project to custom or anonymous type. You cannot project back to Customer class.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文