C# - 如何使用两个foreach循环的结果创建KeyValuePair?

Ter*_*Guy 0 c# linq arrays loops key-value

所以下面是我目前的代码(它不起作用,因为最后一个块看到数组是未定义的,它是为了显示我想要做的)

IEnumerable<string> sponsorshipQuery1 =
  from runner1 in venueQuery6.Descendants("Runner")
  where (int)runner1.Element("Sponsorship") > 0
  orderby (int)runner1.Element("Sponsorship") descending
  select runner1.Element("Firstname").Value;

IEnumerable<string> sponsorshipQuery2 =
  from runner1 in venueQuery6.Descendants("Runner")
  where (int)runner1.Element("Sponsorship") > 0
  orderby (int)runner1.Element("Sponsorship") descending
  select runner1.Element("Sponsorship").Value;

string[] nameArray;
string[] moneyArray;

foreach (string name in sponsorshipQuery1)
{
  nameArray = sponsorshipQuery1
    .OfType<object>()
    .Select(o => o.ToString()).ToArray();
}

foreach (string money in sponsorshipQuery2)
{
  moneyArray = sponsorshipQuery2
    .OfType<object>()
    .Select(o => o.ToString())
    .ToArray();
}

Console.WriteLine("All sponsorship money raised in descending order:");
for (int i = 0; i < nameArray.Length; i++)
{
  Console.WriteLine(nameArray[i] + " has raised £" + moneyArray[i]);
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,我希望能够在底部执行for循环.我猜想更换两个foreach循环并使它们成为KeyValuePairs,但我不知道该怎么做.

我也是使用Linq查询的新手,所以我混合使用查询语法和=>语法的原因是因为我教过查询语法,但我也在尝试在互联网上找到的代码.

stu*_*rtd 6

从您的示例代码中可以看出,您可以在一个查询中获取这两个值,并将它们保存为匿名类型:

var results = from runner1 in venueQuery6.Descendants("Runner")
                  where (int)runner1.Element("Sponsorship") > 0
                  orderby (int)runner1.Element("Sponsorship") descending
                  select new { 
                     Name = runner1.Element("Firstname").Value,
                     Amount = runner1.Element("Sponsorship").Value
                  };
Run Code Online (Sandbox Code Playgroud)

然后你可以循环这些结果:

foreach (var result in results)
{
    Console.WriteLine(result.Name + " has raised £" + result.Amount);
}
Run Code Online (Sandbox Code Playgroud)