【问题标题】:How to return a list of elements that were used in Average as well as their Average如何返回在平均值中使用的元素列表以及它们的平均值
【发布时间】:2021-10-09 15:08:12
【问题描述】:

我正在使用 Entity Framework Core 开发一个 asp.net Web 应用程序。我有一份学生、科目和分数的清单。我需要一个包含主题名称、特定主题的所有分数和平均分数的表格。

我可以用两个不同的查询来做到这一点。但是我放入所有这些的表格应该是可排序的,当表格由两个不同的来源形成时很难排序。我尝试用一​​个 linq 查询来解决我的问题。

Subject | List of Marks | Average

我尝试传递给视图的 DTO 类如下:

    public class Marks
    {
        public string Name;
        public List<int> Mark;
        public double Avg;
    }

我想出的 linq 如下:

            var gradesIQ = _context.Gradebooks
                    .Include(s => s.Student)
                    .Where(s => s.LessonDate.Month == month && s.LessonDate.Year == year
                        && s.Student.GradeId == gradeId && s.StudentId == studentId && s.Mark != "0")
                    .Select(s => new
                    {
                        Name = s.Subject.Name,
                        Mark = s.Mark
                    })
                    .GroupBy(s => s.Name)
                    .Select(g => new Marks
                    {
                        Name = g.Key,
                        Avg = g.Average(s => Convert.ToInt32(s.Mark)),
                        Mark = ??? //should be List<int> Mark
                    });

请帮我为这个问题创建一个 linq。

【问题讨论】:

    标签: c# linq entity-framework-core


    【解决方案1】:

    您无法使用 LINQ to Entities 检索组项目。这是 SQL 限制。

    由于您需要所有元素,因此您可以在客户端进行分组而不会损失性能和资源。

    var gradesIQ = _context.Gradebooks
        .Where(s => s.LessonDate.Month == month && s.LessonDate.Year == year
            && s.Student.GradeId == gradeId && s.StudentId == studentId && s.Mark != "0")
        .Select(s => new
        {
            Name = s.Subject.Name,
            Mark = Convert.ToInt32(s.Mark)
        })
        .AsEnumerable()
        .GroupBy(s => s.Name)
        .Select(g => new Marks
        {
            Name = g.Key,
            Avg = g.Average(s => s.Mark),
            Mark = g.Select(x => x.Mark).ToList()
        });
    

    【讨论】:

      猜你喜欢
      • 2013-07-22
      • 2020-07-12
      • 2018-02-10
      • 2021-09-30
      • 2011-11-30
      • 1970-01-01
      • 2021-01-04
      • 2023-01-27
      • 1970-01-01
      相关资源
      最近更新 更多