C# 使用linq检索平均分数
我希望能得到一点帮助 我正在从数据库中检索以下列表C# 使用linq检索平均分数,c#,linq,C#,Linq,我希望能得到一点帮助 我正在从数据库中检索以下列表 Name AssessNumber Score John 1 90 John 2 88 John 3 67 Steve 1 98 Steve 2 90 我想要的是按平均分数分组并显示最高的评估编号(int) 数据将存储在Listlb=new List()中 我怎样才能做到这一点 亲切问候试试这个:
Name AssessNumber Score
John 1 90
John 2 88
John 3 67
Steve 1 98
Steve 2 90
我想要的是按平均分数分组并显示最高的评估编号(int)
数据将存储在Listlb=new List()中
我怎样才能做到这一点
亲切问候试试这个:
var results = data.GroupBy(x => x.Name).Select(x => new
{
Name = x.Key,
AssessNumber = x.Max(z => z.AssessNumber),
Score = x.Average(z => z.Score)
})
您还可以返回原始数据结构(您将其命名为lbResults
):
请参见尝试以下方法:
List<lblResults> result = data.GroupBy(x => x.Name)
.Select(x => new lbResults
{
Name = x.Key,
AssessNumber = x.Max(z => z.AssesName),
Score = x.Average(s => s.Score)
}
).ToList();
List result=data.GroupBy(x=>x.Name)
.选择(x=>new lbResults
{
Name=x.Key,
AssessNumber=x.Max(z=>z.AssesName),
分数=x.平均(s=>s.分数)
}
).ToList();
我想按平均分数分组
从输出中,您似乎希望按名称
分组,并获得最大评估数
和平均分数
。您的查询应该是:
var query = lb.GroupBy(r => r.Name)
.Select(grp => new
{
Name = grp.Key,
AccessNumber = grp.Max(i=> i.AccessNumber),
AverageScore = grp.Avg(i => i.Score),
});
鉴于:
你想要:
List<lbResults> lb = new List<lbResults>
{
new lbResults{ Name="John", Assess = 1, Score=90},
new lbResults{ Name="John", Assess = 2, Score=88},
new lbResults{ Name="John", Assess = 3, Score=67},
new lbResults{ Name="Steve", Assess = 1, Score=98},
new lbResults{ Name="Steve", Assess = 2, Score=90},
};
var results = lb.GroupBy(l => l.Name)
.Select(g => new
{
Name = g.Key,
Assess = g.Max(gr => gr.Assess),
Score = g.Average(gr => gr.Score)
});
List lb=新列表
{
新的lbResults{Name=“John”,assessment=1,Score=90},
新的lbResults{Name=“John”,assessment=2,Score=88},
新的lbResults{Name=“John”,assessment=3,Score=67},
新的lbResults{Name=“Steve”,assessment=1,Score=98},
新的lbResults{Name=“Steve”,assessment=2,Score=90},
};
var results=lb.GroupBy(l=>l.Name)
.选择(g=>new
{
名称=g.键,
评估=g.Max(gr=>gr.assessment),
得分=g.平均(gr=>gr.得分)
});
让玩家:
var players = new List<Player> {
new Player { Name = "John", AssessNumber = 1, Score = 90 },
new Player { Name = "John", AssessNumber = 2, Score = 88 },
new Player { Name = "John", AssessNumber = 3, Score = 67 },
new Player { Name = "Steve", AssessNumber = 1, Score = 98 },
new Player { Name = "Steve", AssessNumber = 2, Score = 90 },
};
结果playerInfos
是匿名对象的集合:
{ PlayerName = "John", MaxAssessNumber = 3, AverageScore = 81.66666... }
{ PlayerName = "Steve", MaxAssessNumber = 2, AverageScore = 94.0 }
请参阅有关聚合方法的更多信息。应该可以使用straighforwardgroup by
。你试过什么?提示:似乎按平均分数分组
会产生很多单项目分组,我这样回答。你能谈谈.Max(gr=>gr.assessment)和.Average(gr=>gr.Score)的情况吗。gr是什么的缩写?gr
是我给Max
和Average
所需参数的任意名称。与我使用的任意名称l
和g
相同。
List<lbResults> lb = new List<lbResults>
{
new lbResults{ Name="John", Assess = 1, Score=90},
new lbResults{ Name="John", Assess = 2, Score=88},
new lbResults{ Name="John", Assess = 3, Score=67},
new lbResults{ Name="Steve", Assess = 1, Score=98},
new lbResults{ Name="Steve", Assess = 2, Score=90},
};
var results = lb.GroupBy(l => l.Name)
.Select(g => new
{
Name = g.Key,
Assess = g.Max(gr => gr.Assess),
Score = g.Average(gr => gr.Score)
});
var players = new List<Player> {
new Player { Name = "John", AssessNumber = 1, Score = 90 },
new Player { Name = "John", AssessNumber = 2, Score = 88 },
new Player { Name = "John", AssessNumber = 3, Score = 67 },
new Player { Name = "Steve", AssessNumber = 1, Score = 98 },
new Player { Name = "Steve", AssessNumber = 2, Score = 90 },
};
var playerInfos =
from player in players
group player by player.Name into playerGroup
select new
{
PlayerName = playerGroup.Key,
MaxAssessNumber = playerGroup.Max(x => x.AssessNumber),
AverageScore = playerGroup.Average(x => x.Score),
};
{ PlayerName = "John", MaxAssessNumber = 3, AverageScore = 81.66666... }
{ PlayerName = "Steve", MaxAssessNumber = 2, AverageScore = 94.0 }