C#如何根据LINQ查询中的字符串数组声明新的Dictionary对象

pro*_*mer 1 c# linq

我有一些像这样的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;

class Program
{
    static void Main(string[] args)
    {
        string xml = @"<Root>
  <Report1>
    <Row>
      <Field1>data1-1</Field1>
      <Field2>data1-2</Field2>
      <!-- many more fields -->
    </Row>
    <Row>
      <Field1>data2-1</Field1>
      <Field2>data2-2</Field2>
      <!-- many more fields -->
    </Row>
  </Report1>
</Root>";

        XDocument doc = XDocument.Parse(xml);

        var report1 = from report in doc.Root.Elements("Report1").Elements("Row")
                      select new Dictionary<string, string>()
                          {
                              {"Field1", report.Elements("Field1").First().Value},
                              {"Field2", report.Elements("Field2").First().Value}
                          };

        var i = 1;
        foreach (Dictionary<string, string> dict in report1)
        {
            Console.WriteLine(String.Format("Row{0}: ", i));
            Console.WriteLine("  Field1: {0}", dict["Field1"]);
            Console.WriteLine("  Field2: {0}", dict["Field2"]);
            i++;
        }

        Console.ReadLine();
    }
}
Run Code Online (Sandbox Code Playgroud)

是否可以定义一个字符串数组或其他一些我可以用来声明这些字典对象的数据结构?这是一些愚蠢的伪代码帮助显示我的想法:

编辑下面的伪代码中的变量fieldNames将是我期望的名称数组,而不是基于xml源字段名称.我将忽略xml源中未在fieldNames数组中显式设置的任何字段名称.

var report1 = from report in doc.Root.Elements("Report1").Elements("Row")
              select new Dictionary<string, string>()
           {
              foreach (var fieldName in fieldNames)
              {
                  {fieldName, report.Elements(fieldName).First().Value}
              }
           };
Run Code Online (Sandbox Code Playgroud)

Tho*_*ith 5

用途Enumerable.ToDictionary:

var report1 = 
    from report in doc.Root.Elements("Report1").Elements("Row")
    select new[] {"Field1", "Field2", "Field3"}
        .ToDictionary(x => x, x => report.Elements(x).First().Value)
Run Code Online (Sandbox Code Playgroud)