这是我的LINQ:
var sdEnumTypes = from et in sdXmlEnums.Elements("Enum")
select new SdEnum
{
Name = et.Attribute("name").Value,
EnumGuid = et.Attribute("guid").Value,
Enumerators = (from en in et.Elements("Enumerator")
select new SdEnumerator
{
DisplayName = en.Attribute("displayName").Value,
Name = en.Attribute("name").Value
//Enum = I want this to point to parent SdEnum
}).ToList()
};
我想将(注释部分)枚举值设置为在升级时选择的SdEnum。怎么做?
这是正在解析的相应XML,以便您可视化我想要做的事情:
<Enums>
<Enum name="Color" guid="{2C68F947-3103-4F3C-9855-60F289B3A039}">
<Enumerator name="Red" displayName="Red Color"/>
<Enumerator name="Green" displayName="Green Color" />
<Enumerator name="Blue" displayName="BlueColor"/>
</Enum>
</Enums>
P.S。 有没有办法简化这个查询?
答案 0 :(得分:0)
最简单的方法是使用另一个投影:
var result = sdEnumTypes.Select(e =>
{
e.Enumerators.ForEach(enumerator => enumerator.Enum = e);
return e;
});
答案 1 :(得分:0)
这是一个使用XML Linq
的方法using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string input =
"<Enums>" +
"<Enum name=\"Color\" guid=\"{2C68F947-3103-4F3C-9855-60F289B3A039}\">" +
"<Enumerator name=\"Red\" displayName=\"Red Color\"/>" +
"<Enumerator name=\"Green\" displayName=\"Green Color\" />" +
"<Enumerator name=\"Blue\" displayName=\"BlueColor\"/>" +
"</Enum>" +
"</Enums>";
XDocument doc = XDocument.Parse(input);
var results = doc.Descendants("Enum").Select(x => new {
name = x.Attribute("name").Value,
guid = x.Attribute("guid").Value,
enumerator = x.Elements("Enumerator").Select(y => new {
name = y.Attribute("name").Value,
displayName = y.Attribute("displayName").Value,
parent = x
}).ToList()
}).ToList();
}
}
}