对于下面的数据库部分,我需要找到赛季中每支球队得分最多的球队。
为此,我使用了方法
$ od -t x1 download
0000000 15 03 03 00 02 02 50
0000007
和
public List<Tour> GetAllTours(Guid seasonGuid){...}
和
public List<SimpleMatch> GetMatches(Guid tour)
{
using (var db = new ConnectToDb())
{
if (!db.Matches.Any()) return new List<Match>();
var matches = db.Matches;
var matchesToReturn = new List<Match>();
foreach (var item in
matches
.Include(x => x.Home)
.Include(x => x.Guest)
.Include(x => x.Result)
.Include(x => x.Tour))
{
if (item.Tour.Id != tour)
matchesToReturn.Add(item);
}
return matchesToReturn;
}
}
其中public List<SimpleTeam> GetTeamMostGoalInSeason(List<Match> matches){...}
是具有计数目标的团队,如果最大计数= =很多的团队使用SimpleTeam
它的方法不小,我不知道如何使用LINQ查询。
答案 0 :(得分:1)
效率不高,但我的想法是这样的:
matches.SelectMany(match => new[] {
new TeamScore {
TeamId = match.HomeId,
Goals = match.Result.HomeTeamGoals
},
new TeamScore {
TeamId = match.GuestId,
Goals = match.Result.GuestTeamGoals
}
})
.GroupBy(score => score.Goals)
.OrderByDescending(group => group.Key)
.First()
.Select(score => score.TeamId);
其中TeamScore是一个简单的结构。
这将返回IEnumerable与所有得分最高的球队(如果是相同的数字)。您可能需要更改一些属性名称或其他详细信息。我不熟悉LINQ to databases。
如果你只想要一个,你可以做First()但是会选择第一个并根据顺序忽略其他的。 SingleOrDefault()在绘制时会返回null,如果这是你想要的。
编辑:要获得所有旅行中的所有比赛,你可以这样做:
GetAllTours(...).SelectMany(tour => GetMatches(tour))
但是既然您正在处理数据库,您可以直接询问所有匹配项。