c# - 我需要在 LINQ C# 中找到 3 个参数的平均值
问题描述
我需要打印平均不大于 4 的人来进行代数。例如,“学校:131,姓名:BLA-BLA,平均:3,5”。这就是我尝试过的东西,但它给了我一个例外“序列不包含元素”更新:“不大于 4”
var result = students
.OrderBy(s => s.Surname)
.ThenBy(o => o.Initials)
.Select(n => new
{
Name = n.Surname + " " + n.Initials,
Class = n.Class,
Average = students
.Where(s => s.Subject == "Algebra" && n.Surname == s.Surname && n.Initials == s.Initials)
.Average(w => w.Mark)
});
var students = new[]
{
new {Subject = "Algebra", Surname = "Jopin", Initials = "S.S", Class = 5, Mark = 2},
new {Subject = "Algebra", Surname = "Jopin", Initials = "S.S", Class = 5, Mark = 2},
new {Subject = "Algebra", Surname = "Jopin", Initials = "S.S", Class = 5, Mark = 3},
new {Subject = "Geometry", Surname = "Jopin", Initials = "S.S", Class = 5, Mark = 5},
new {Subject = "C.S", Surname = "Jopin", Initials = "S.S", Class = 5, Mark = 5},
new {Subject = "C.S", Surname = "Jopin", Initials = "S.S", Class = 5, Mark = 5},
new {Subject = "Algebra", Surname = "Bloom", Initials = "Q.V", Class = 2, Mark = 5},
new {Subject = "Algebra", Surname = "Bloom", Initials = "Q.V", Class = 2, Mark = 5},
new {Subject = "Algebra", Surname = "Bloom", Initials = "Q.V", Class = 2, Mark = 5},
new {Subject = "Geometry", Surname = "Bloom", Initials = "Q.V", Class = 2, Mark = 5},
new {Subject = "C.S", Surname = "Bloom", Initials = "Q.V", Class = 2, Mark = 5},
new {Subject = "C.S", Surname = "Bloom", Initials = "Q.V", Class = 2, Mark = 5},
new {Subject = "Geometry", Surname = "Roflov", Initials = "E.Y", Class = 1, Mark = 2},
new {Subject = "C.S", Surname = "Roflov", Initials = "E.Y", Class = 1, Mark = 2},
new {Subject = "C.S", Surname = "Roflov", Initials = "E.Y", Class = 1, Mark = 2},
new {Subject = "Algebra", Surname = "Einstein", Initials = "B.H", Class = 4, Mark = 3},
new {Subject = "Algebra", Surname = "Einstein", Initials = "B.H", Class = 4, Mark = 4},
new {Subject = "Geometry", Surname = "Einstein", Initials = "B.H", Class = 4, Mark = 5}
};
解决方案
如果序列不包含任何元素,Average 方法可能会因 InvalidOperationException 而失败。从您的示例来看,至少对于学生“Roflow EY”来说,“代数”没有条目
像这样的东西应该做你想做的事。
var result = students
.Where(s => s.Subject == "Algebra")
.GroupBy(s => new{s.Surname, s.Initials, s.Class})
.Select(g => new{ Name = g.Key.Surname + g.Key.Initials, g.Key.Class, Average = g.Average(x => x.Mark)})
.Where(x => x.Average >= 4)
.OrderBy(x => x.Name);
推荐阅读
- pandas - 与 Pandas 结果相比,数据框中的 Pyspark 唯一值数量不同
- html - 隐藏 Flexbox 溢出
- javafx - 无法将 GridView 从 ControlsFX 库拖到我在 SceneBuilder 中的项目中
- java - 从容器类访问属性
- javascript - React, Spring - 从 spring 后端提供两个 react 应用程序
- python - 从 Python 列表中删除最后一个和第一个字符的特定元素
- javascript - Ruby on Rails - 使用 Javascript 按键时表单字段更新值
- java - 工厂模式中的资源泄漏
- python - Python3.6 使用字体真棒图标
- javascript - 如何在函数内部动态设置模板引用