我需要帮助确保在这种情况下我使用正确的数据加载策略以及一些帮助最终确定查询的一些细节.我目前正在使用here概述的急切加载方法来处理某个“仪表板”视图,该视图需要来自大约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中的数据加载策略/语法全部内容,希望文章能够帮你解决c# – EF4中的数据加载策略/语法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)