C# 通过LINQ语句C从Group返回多个值#

C# 通过LINQ语句C从Group返回多个值#,c#,winforms,linq,C#,Winforms,Linq,您好,我很难从group by语句中获取正确的值。我试图在此处获得一个按另一个值分组的值: var allGuilds = Player.dictGuilds; var guildTypeRoster = from g in allGuilds where g.Value.GuildType.ToString() == CBGuildType.SelectedItem.ToString() orderby g.Value.GuildName group g.V

您好,我很难从group by语句中获取正确的值。我试图在此处获得一个按另一个值分组的值:

var allGuilds = Player.dictGuilds;


var guildTypeRoster =
    from g in allGuilds
    where g.Value.GuildType.ToString() == CBGuildType.SelectedItem.ToString()
    orderby g.Value.GuildName
    group g.Value.GuildServer.ToString() by g.Value.GuildName;
所以,基本上,我是在尝试根据他们所在的服务器对公会中的名字进行分组。我在尝试输出分组依据的服务器和此处的名称时遇到问题:

foreach (var pair in guildTypeRoster)
{
    OutputBox.AppendText(pair.Key + "\n");
}

我只能获取值的键,该值是我分组所依据的名称。我试图同时显示服务器和两个显示器,但我似乎找不到一种方法来做到这一点。如果有人能帮上忙,那就太好了。

您需要迭代每个组的记录,因此需要额外的循环

foreach (var pair in guildTypeRoster)
{
    foreach(var value in pair) 
    {
        OutputBox.AppendText(pair.Key + ": " + value.GuildName + "\n");
    }
}

您是否尝试过使用
pair.Value
获取密钥的值?它应该是group new{server=g.Value.GuildServer.ToString(),guildName=g.Value.guildName}@Stemado是的,我尝试过pair.Value,但它不存在。您希望通过服务器对guild中的名称进行分组。那就这么做吧。现在,您正在按名称对服务器进行分组。在我使用value.ToString()时工作,但我在打印时遇到问题,因为它会显示服务器两次而不是一次,并列出所有行会根据您需要返回的内容更改分组;例如:
按g.Value.GuildName分组g.Value