C# 在C中的网格中显示LINQ查询结果的问题

C# 在C中的网格中显示LINQ查询结果的问题,c#,linq,C#,Linq,我在这里收到了一些关于以下LINQ查询的帮助,但我仍然在努力解决它。我试图获得的结果是在DataGridView控件中显示xml文件中的一些属性及其值。我通过单击按钮调用我的方法,并尝试传回列表以在网格中显示。以下是该行的一个示例: <z:row CenterCode="JAX" CenterName="Jacksonville" Version="1.0" NextExport="66742" NextImport="29756" LastImportTime="2015-06-10T1

我在这里收到了一些关于以下LINQ查询的帮助,但我仍然在努力解决它。我试图获得的结果是在DataGridView控件中显示xml文件中的一些属性及其值。我通过单击按钮调用我的方法,并尝试传回列表以在网格中显示。以下是该行的一个示例:

<z:row CenterCode="JAX" CenterName="Jacksonville" Version="1.0" NextExport="66742" NextImport="29756" LastImportTime="2015-06-10T14:48:33" FtpProxyServer="" FtpUserName="" FtpPassword="" ResetImportID="False"/>

我需要选择这个和其他4个。我还收到一个转换错误-无法将类型“System.Collections.Generic.List”隐式转换为“System.Collections.Generic.List”。感谢您的指点帮助。

您可以使用匿名类型:

var attributes =
    elementQuery.Select(e => new
        {
            CenterName = (string)e.Attribute["CenterName"],
            Version = (string)e.Attribute["Version"],
            // more attributes
        }).ToList();
但是,您不能以一种有用的方式从该方法返回该值。因此,如果确实需要将属性名称和属性值都作为字符串,请尝试以下方法:

var attributes =
    elementQuery.Select(e => new []
        {
            Tuple.Create("CenterName", (string)e.Attribute["CenterName"]),
            Tuple.Create("Version", (string)e.Attribute["Version"]),
            // more attributes
        }).SelectMany(x => x).ToList();
方法的返回类型现在必须是List

最后,如果您确实需要一个列表作为返回类型,请使用以下代码:

var attributes =
    elementQuery.Select(e => new []
        {
            new [] { "CenterName", (string)e.Attribute["CenterName"] },
            new [] { "Version", (string)e.Attribute["Version"] },
            // more attributes
        }).SelectMany(x => x).ToList();

我解决了自己的问题。以下是我所做的:

为所需的属性创建了一个类:

    public class dataRow
{
    public string CenterName { get; set; }
    public string CenterCode { get; set; }
    public string NextImport { get; set; }
    public string NextExport { get; set; }
    public string LastImportTime { get; set; }
}
将结果选择到其中:

            List<dataRow> dataRows = elementQuery.Select( e =>  new dataRow 
        { CenterName = (string)e.Attribute("CenterName"),
          CenterCode = (string)e.Attribute("CenterCode"),
          NextImport = (string)e.Attribute("NextImport"),
          NextExport = (string)e.Attribute("NextExport"),
          LastImportTime = (string)e.Attribute("LastImportTime") }).ToList();

我能用匿名类型填充网格吗?这导致以下问题:无法将[]索引应用于“方法组”类型的表达式@Brian:很可能是,但您无法轻松从方法返回它。请检查我的更新以了解其他方法。
var attributes =
    elementQuery.Select(e => new []
        {
            new [] { "CenterName", (string)e.Attribute["CenterName"] },
            new [] { "Version", (string)e.Attribute["Version"] },
            // more attributes
        }).SelectMany(x => x).ToList();
    public class dataRow
{
    public string CenterName { get; set; }
    public string CenterCode { get; set; }
    public string NextImport { get; set; }
    public string NextExport { get; set; }
    public string LastImportTime { get; set; }
}
            List<dataRow> dataRows = elementQuery.Select( e =>  new dataRow 
        { CenterName = (string)e.Attribute("CenterName"),
          CenterCode = (string)e.Attribute("CenterCode"),
          NextImport = (string)e.Attribute("NextImport"),
          NextExport = (string)e.Attribute("NextExport"),
          LastImportTime = (string)e.Attribute("LastImportTime") }).ToList();
public static List<dataRow> MonitorCounts(string upperLimit)
dataGridView1.DataSource = xmlProcessing.MonitorCounts(tbxUpperLimit.Text.ToString());

return dataRows;