是否有一种方法可以组合两个LINQ2XML查询?

本文关键字:两个 LINQ2XML 查询 组合 一种 是否 方法 | 更新日期: 2023-09-27 18:07:59

var instructions = (from item in config.Elements("import")
select new
{
    name = item.Attribute("name").Value,
    watchFolder = item.Attribute("watchFolder").Value,
    root = item.Element("documentRoot").Value,
    DocumentNameDynamic = item.Element("documentName").Attribute("xpath").Value,
    DocumentNameStatic = item.Element("documentName").Attribute("static").Value,
    TemplateName = item.Element("template").Attribute("template").Value,
    Path = item.Element("path").Attribute("path").Value,
    fields = item.Element("fields").Elements()
}).SingleOrDefault();
var fields = from item in instructions.fields
select new
{
    xpath = item.Attribute("xpath").Value,
    FieldName = item.Attribute("FieldName").Value,
    isMultiValue = bool.Parse(item.Attribute("multiValue").Value)
};

是否有一种方法可以组合两个LINQ2XML查询?

我认为这样的东西应该工作。我添加了Select方法来返回匿名类。

var instructions = (from item in config.Elements("import")
select new
{
    name = item.Attribute("name").Value,
    watchFolder = item.Attribute("watchFolder").Value,
    root = item.Element("documentRoot").Value,
    DocumentNameDynamic = item.Element("documentName").Attribute("xpath").Value,
    DocumentNameStatic = item.Element("documentName").Attribute("static").Value,
    TemplateName = item.Element("template").Attribute("template").Value,
    Path = item.Element("path").Attribute("path").Value,
    fields = item.Element("fields").Elements().Select(item => new {
        xpath = item.Attribute("xpath").Value,
        FieldName = item.Attribute("FieldName").Value,
        isMultiValue = bool.Parse(item.Attribute("multiValue").Value)
    }
).SingleOrDefault();

如果你不想使用选择扩展方法,你可以使用LINQ语法。下面是一个例子。

var instructions = (from item in config.Elements("import")
select new
{
    name = item.Attribute("name").Value,
    watchFolder = item.Attribute("watchFolder").Value,
    root = item.Element("documentRoot").Value,
    DocumentNameDynamic = item.Element("documentName").Attribute("xpath").Value,
    DocumentNameStatic = item.Element("documentName").Attribute("static").Value,
    TemplateName = item.Element("template").Attribute("template").Value,
    Path = item.Element("path").Attribute("path").Value,
    fields = from e in item.Element("fields").Elements()
             select new {
                 xpath = item.Attribute("xpath").Value,
                 FieldName = item.Attribute("FieldName").Value,
                 isMultiValue = bool.Parse(item.Attribute("multiValue").Value)
             } // End of inner select statement
} // End of outer select statement
).SingleOrDefault();