ef多条件映射_如何优化EF核心中的多个条件数据库调用以填充多个列表

我现在有点为难,我是一个喜欢C#/.NET核心的学生,也喜欢用它来做我的爱好项目。但是我很难找到解决我当前问题的方法,我也不知道如何解决它。

在。NET Core中,我想在我的motorsport数据库中显示关于赛车手的前10个统计数据。更精确地说,我有一个关系数据库,其中有一个名为“driverresults”的表,它保存所有车手的所有比赛结果,“driverresults”保存“seasondriver”的外键,“seasondriver”是一个包含特定赛季车手信息的表,最后“seasondriver”包含“driver”表的外键,“driver”表包含车手是谁。例如,我想用某一位车手赢得比赛的频率来做一个排行榜。

leaderlistsModel是页面的ViewModel,包含5个列表,每个列表包含一个驱动程序对象和一个用于计算的统计信息的int。为了获取这些领导列表,领导列表的控制器调用一个方法来获取这些领导列表,方法如下所示:LeaderlistsModel leaderlistsModel = new LeaderlistsModel();

var drivers = DataContext.DriverResults

.IgnoreQueryFilters()

.Where(dr => dr.Race.Season.Championship.ActiveChampionship)

.GroupBy(sd => sd.SeasonDriver.Driver);

我不知道如何在一个LINQ查询中解决这个问题,所以为了填充LeaderlistsModel中的这5个列表中的每一个,我对var驱动程序进行了不同的调用,因此我们得到了这5个查询:leaderlistsModel.LeaderlistWins = drivers

.Select(dr => new LeaderlistWin

{

Driver = dr.Key,

WinCount = dr.Sum(s => s.Position == 1 ? 1 : 0),

})

.OrderByDescending(dr => dr.WinCount)

.Take(10);

leaderlistsModel.LeaderlistPodiums = drivers

.Select(dr => new LeaderlistPodium

{

Driver = dr.Key,

PodiumCount = dr.Sum(s => s.Position <= 3 ? 1 : 0),

})

.OrderByDescending(dr => dr.PodiumCount)

.Take(10);

leaderlistsModel.LeaderlistStarts = drivers

.Select(dr => new LeaderlistStart

{

Driver = dr.Key,

StartCount = dr.Count(),

})

.OrderByDescending(dr => dr.StartCount)

.Take(10);

leaderlistsModel.LeaderlistNonFinishes = drivers

.Select(dr => new LeaderlistNonFinish

{

Driver = dr.Key,

NonFinishCount = dr.Sum(s => s.Status == Status.DNF || s.Status == Status.DSQ ? 1 : 0),

})

.OrderByDescending(dr => dr.NonFinishCount)

.Take(10);

leaderlistsModel.LeaderlistPoles = drivers

.Select(dr => new LeaderlistPole

{

Driver = dr.Key,

PoleCount = dr.Sum(s => s.Grid == 1 ? 1 : 0),

})

.OrderByDescending(dr => dr.PoleCount)

.Take(10);

每个查询需要23秒才能完成,因此整个页面需要大约150秒才能加载,对于只需要5个简单的领导列表的内容来说,这是非常长的。

所以我的问题是,我怎样才能计算并得到驱动结果的统计数据,但如果没有它,加载的时间会非常长?

为了进一步的参考,我最终想要显示的页面如下所示。

谢谢你阅读这篇文章,我希望你能帮助我!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值