为了账号安全,请及时绑定邮箱和手机立即绑定

重构linq查询并在分组后返回单个

重构linq查询并在分组后返回单个

C#
呼如林 2021-05-14 18:40:12
我有以下linq查询:            var q = Queryable.First(Queryable.Select(r.Find((Expression<Func<Application, bool>>)((Application x) =>                 x.IsValid && x.CreatedOn < startDate && x.CreatedOn >= endDate))                .GroupBy((Expression<Func<Application, int>>)((Application x) => (int)1))                , (IGrouping<int, Application> g) => new                {                    AvgApplicationTime = (int)Math.Round(g.Average((Application i) => i.ApplicationTime)),                    AvgDecisionTime = (int)Math.Round(g.Average((Application i) => i.DecisionTime)),                    ApprovalRate = 100.0 * g.Count<Application>((Application i) => i.IsAccepted) / g.Count<Application>()                }));            return new ApplicationStats((int)q.AvgApplicationTime, (int)q.AvgDecisionTime, q.ApprovalRate);我很确定可以简化查询,并已着手这样做。我的方法始终是尝试并理解我正在使用的查询,而不是仅仅研究并希望它能起作用。为此,我想在重新组装之前将其分解为几个部分,我在这里尝试这样做:            var q1 = r.Find(x => x.CreatedOn < startDate && x.CreatedOn >= endDate);            var q2 = q1.Select(x => x.Applicant);            var q3 = q2.GroupBy(x => 1, (g) => new ApplicationStats(1, 1, 0.75)); // I've omitted some bits for brevity            // q4 = ??? // Needs to return a single Applicationstats()不幸的是,尽管使用了.Select()、. SelectMany()、. First()的组合,但我仍未设法弄清楚难题的最后一部分。我知道答案将很简单,但我们会提供任何帮助。
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 147 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信