gpt4 book ai didi

c# - EF4 中的数据加载策略/语法

转载 作者:行者123 更新时间:2023-11-30 12:51:36 25 4
gpt4 key购买 nike

长期潜伏,第一次发帖,刚学EF4和MVC3。

我需要帮助确保我在这种情况下使用了正确的数据加载策略,并需要一些帮助来完成查询的一些细节。我目前正在使用概述的预加载方法 here对于某种“仪表板” View ,需要来自大约 10 个表(所有表都有 FK 关系)的少量数据。

            var query = from l in db.Leagues
.Include("Sport")
.Include("LeagueContacts")
.Include("LeagueContacts.User")
.Include("LeagueContacts.User.UserContactDatas")
.Include("LeagueEvents")
.Include("LeagueEvents.Event")
.Include("Seasons")
.Include("Seasons.Divisions")
.Include("Seasons.Divisions.Teams")
.Where(l => l.URLPart.Equals(leagueName))
select (l);

model = (Models.League) query.First();

但是,我需要对我无法解决的数据进行一些额外的过滤、排序和整形。以下是我目前的主要需求/担忧:

  • 几个子对象仍然需要额外的过滤,但我还没有弄清楚语法或最佳方法。示例:“TOP 3 LeagueEvents.Event WHERE StartDate >= getdate() ORDER BY LeagueEvents.Event.StartDate”

  • 我需要对一些字段进行排序。示例:ORDERBY Seasons.StartDate、LeagueEvents.Event.StartDate 和 LeagueContacts.User.SortOrder 等。

  • 我已经非常关心此查询生成的 SQL 的总体大小和连接的数量,并且我认为我可能需要一种不同的数据加载方法。(显式加载?多个 QueryObjects?POCO ?)

非常感谢任何关于如何解决这些剩余需求以及确保最佳性能的输入、指导或建议。

最佳答案

您对查询大小和 size of the result set are tangible 的关注.

正如@BrokenGlass 提到的,EF 不允许您对包含项进行过滤或排序。如果你想排序或过滤关系,你必须使用投影到匿名类型或自定义(非映射)类型:

        var query = db.Leagues
.Where(l => l.URLPart.Equals(leagueName))
.Select(l => new
{
League = l,
Events = l.LeagueEvents.Where(...)
.OrderBy(...)
.Take(3)
.Select(e => e.Event)
...
});

关于c# - EF4 中的数据加载策略/语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6496914/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com