我正在努力解决LINQ问题。我必须在所有选区(使用选区列表)中找到候选人的最高票数(Max),并获得ConstituencyName,CandidateName和Votes值。这意味着我必须在两个列表中找到最高值并选择对象选区(或者至少得到它的值)。
public class ListOfConstituencies()
{
public List<Constituency> Constituencies {get;set;}
}
public class Constituency
{
public string ConstituencyName {get;set;}
public List<Candidate> Candidates {get;set;}
}
public class Candidate
{
public string CandidateName {get;set;}
public int Votes {get;set;}
}
我尝试了很多解决方案,但我找不到符合我问题的解决方案: Join two tables using LINQ Query and order based two parameters或 Linq expression to find the max value of a List<List<int>>?
答案 0 :(得分:2)
你可以在包含选区和候选人的单个可枚举匿名对象中选择多个,然后排序并抓住第一个。
.sql
答案 1 :(得分:0)
您可以使用匿名与orderbydescending结合来解决此问题。
var contituencyWithMostVotes = Constituencies
.Select(c => new
{
Contituency = c,
Candidate = c.Candidates.OrderByDescending(can => can.Votes).First()
})
.OrderByDescending(c => c.Candidate.Votes).First();
结果&#34; contituencyWithMostVotes&#34;是一个具有2个属性的匿名对象。
您可以从这些属性中检索所有信息。
答案 2 :(得分:0)
您可以使用SelectMany()
展平并将嵌套的候选人列表投射到匿名类型,然后使用MoreLinq's MaxBy()
功能获得投票最多的人。
var result = constituencies.SelectMany(con => con.Candidates, (con, can) =>
new { Constituency = con, Candidate = can })
.MaxBy(x => x.Candidate.Votes);