从Linq中的计数表中选择多个表

时间:2015-09-16 12:19:03

标签: linq

我正在忙于一个小型在线投票网络应用程序,现在我努力获得我存储在不同表格中的每一方的总投票数。这是我尝试过的,这个方法从名为[dbo]的投票表中获取每一方。[VoterCandidateMapping]

NpgsqlPolygon

然后我想用这个方法计算与特定部分相关的每个投票,这里是代码

public List<int> GetAllPartIDs()
{
    List<int> partieIDs = new List<int>();
    var parties = (from votes in voteDB.VoterCandidateMappings
                   select votes.PartyID).Distinct().ToList();
    partieIDs = parties;
    return partieIDs;
}

它运行并返回几乎所有数据,但总票数相同

1 个答案:

答案 0 :(得分:1)

它无效的原因是您尝试在单个numberOfVotes变量中存储多个值。

让我们来看看你现在拥有的代码。

第一个foreach循环计算每一方的投票并分配给numberOfVotes变量。每次分配值时,numberOfVotes中的现有值都会被覆盖。在循环结束时numberOfVotes包含最后一方的投票数。当您使用相同的变量返回结果时,这是您在结果中看到的值。

以下是正确执行此操作的一种方法:

public IQueryable<ResultsViewModel> GetResults()
{
    var groupedVotes = voteDB.VoterCandidateMappings
        .GroupBy(x => x.PartyID)
        .Select(x => new { PartyId = x.Key, NumberOfVotes = x.Count());

    return voteDB.Parties
        .Select(x => new ResultsViewModel
        {
            PartyName = x.Name,
            TotalVotes = groupedVotes
                .Where(y => y.PartyId == x.Id)
                .Select(y => y.NumberOfVotes)
                .FirstOrDefault()
        });
}