C# 使用字典C进行Linq查询

C# 使用字典C进行Linq查询,c#,linq,dictionary,C#,Linq,Dictionary,我有一本获胜球队的字典。我希望能够找到一本字典,里面有我发现的和另一支球队一样的获胜率。 在我这么做之前: <!-- language: lang-js --> foreach (var r in divRanks) { foreach (var rec in divRanks) { if (r.teamID != rec.teamID) { if (r.winPct == rec.winPct)

我有一本获胜球队的字典。我希望能够找到一本字典,里面有我发现的和另一支球队一样的获胜率。 在我这么做之前:

<!-- language: lang-js -->

foreach (var r in divRanks)
{
    foreach (var rec in divRanks)
    {
        if (r.teamID != rec.teamID)
        {
            if (r.winPct == rec.winPct)
            {
                r.tied = true;
                rec.tied = true;
            }
        }
    }
}
我觉得一定有更好的方法可以使用LINQ查询团队,然后以这种方式设置绑定变量。在包含未绑定的记录后,我需要这些结果,以便我可以使用它们。

您可以在winPct上分组,筛选出只有一个成员的组,并在所有其他项目上将绑定设置为true

此LINQ查询使用的divRanks与嵌套的foreach循环相同:


您应该将GroupBy与ToDictionary结合使用:

var dict = list.GroupBy(item => item.WinPct).ToDictionary(group => group.Key);
foreach (var item in dict)
{
    Console.Out.WriteLine("Key (winpct which is same for items): {0}", item.Key);
    if(item.Value.Count() > 1)
    {
        foreach (var groupItem in item.Value)
        {
            Console.Out.WriteLine("GroupItem: {0} - {1}", groupItem.TeamId, groupItem.WinPct);
            item.Tied = true;
        }
    }
}
输入:

list.Add(new Rank() { TeamId = 1, WinPct = 1 });
list.Add(new Rank() { TeamId = 2, WinPct = 1 });
list.Add(new Rank() { TeamId = 3, WinPct = 2 });
list.Add(new Rank() { TeamId = 4, WinPct = 2 });
list.Add(new Rank() { TeamId = 5, WinPct = 5 });
list.Add(new Rank() { TeamId = 6, WinPct = 6 });
输出:

Key (winpct which is same for items): 1
GroupItem: 1 - 1
GroupItem: 2 - 1
Key (winpct which is same for items): 2
GroupItem: 3 - 2
GroupItem: 4 - 2
Key (winpct which is same for items): 5
GroupItem: 5 - 5
Key (winpct which is same for items): 6
GroupItem: 6 - 6
编辑:
现在它还将设置绑定属性。我以为你只是做了这个黑客,然后不知何故合并成一本字典。如果您只想设置绑定属性,最好使用dasblinkenlights解决方案

在本例中,返回了一个基于winPct作为键的字典,但我如何知道哪些键中有多个团队?字典项的值是IGrouping,它允许您枚举子项。还有,也数一数。我更改了代码,现在它检查是否有多个相同的条目。
Key (winpct which is same for items): 1
GroupItem: 1 - 1
GroupItem: 2 - 1
Key (winpct which is same for items): 2
GroupItem: 3 - 2
GroupItem: 4 - 2
Key (winpct which is same for items): 5
GroupItem: 5 - 5
Key (winpct which is same for items): 6
GroupItem: 6 - 6