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 }

请参阅有关聚合方法的更多信息。

应该可以使用straighforward
group 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 }