C# 帮助使用Linq和XML创建类的实例
我正在尝试使用Linq和XML创建一个类的实例。我的代码中出现以下错误,不知道如何修复它。我的代码编辑器告诉我以下代码中的“选择”是罪魁祸首。我是Linq的新手,所以非常感谢您的帮助 无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“gcDiversityVision.VisionData”。存在显式转换(是否缺少强制转换?)C# 帮助使用Linq和XML创建类的实例,c#,xml,linq,C#,Xml,Linq,我正在尝试使用Linq和XML创建一个类的实例。我的代码中出现以下错误,不知道如何修复它。我的代码编辑器告诉我以下代码中的“选择”是罪魁祸首。我是Linq的新手,所以非常感谢您的帮助 无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“gcDiversityVision.VisionData”。存在显式转换(是否缺少强制转换?) XElement visionXML=XElement.Parse(e.Result); VisionData new
XElement visionXML=XElement.Parse(e.Result);
VisionData newVisionData=新VisionData(新列表(visionXML.substands(ns+“Employee”)。选择(f=>f.Element(ns+“EmployeeName”).Value)),
新列表(visionXML.subjects(ns+“Employee”).Select(f=>f.Element(ns+“EmployeeTitle”).Value)),
新列表(visionXML.subjects(ns+“Employee”).Select(f=>f.Element(ns+“include”).Attribute(“externalPath”).Value)),
新列表(visionXML.subjects(ns+“Employee”).Select(f=>f.Element(ns+“EmployeeVideo”).Value)),
visionXML.Element(ns+“LinkHeaderText”).Value,
visionXML.Element(ns+“ButtonLinkText”).Value,
visionXML.Element(ns+“ButtonLinkURL”).Value,
新列表(visionXML.substands(ns+“Links”).Select(f=>f.Element(ns+“LinkURL”).Value)),
新列表(visionXML.substands(ns+“Links”).Select(f=>f.Element(ns+“LinkText”).Value)),
新列表(visionXML.substands(ns+“EmployeeStoryHeaderParagraph”)。选择(f=>f.Element(ns+“EmployeeHeader”).Value),
新列表(visionXML.Substands(ns+“EmployeeStoryHeaderParagraph”)。选择(f=>f.Substands(ns+“EmployeeParagraphs”)。选择(ep=>ep.Element(ns+“EmployeeParagraphs”).Value)。ToArray()
);
员工姓名1
雇员职位1
/hrit/Careers/PublishingImages/down_-carat.gif
mms://msnvidweb.wmod.msecnd.net/a10026/e1/ds/us/CMG_US/CMG_Microsoft/8F036573-ADAD-40B3-B2A2-A070E6C970B2.wmv
员工姓名2
员工职称2
/hrit/Careers/PublishingImages/2nav_bg.png
mms://msnvidweb.wmod.msecnd.net/a10026/e1/ds/us/CMG_US/CMG_Microsoft/BE4A3DF0-15FB-4610-A478-F681FCBE2DFA.wmv
视觉头1
愿景第1.1段
愿景第1.2段
视觉头2
愿景第2.1段
愿景第2.2段
按钮链接文本
http://www.bing.com/
链接文本2
链接文本1
http://www.bing.com/
链接文本2
http://www.bong.com/
链接文本3
http://www.bing.com/
链接文本4
http://www.bong.com/
您已告知it部门为文档中的每个
gcDiversityVision
元素创建一个新的VisonData
。因此,结果是一系列VisionData
对象
你到底想做什么?创建一个,还是创建多个?有很多选择,如果你给我们更多关于你想做什么的信息,我们可以帮助你更多
假设您拥有VisionData
类,我还建议您编写一个静态VisionData.FromXElement
方法(或将其放在其他地方),这样您的查询就不会太大
编辑:好的,根据评论,听起来你根本不想要LINQ查询。只是:
XElement root = visionXml.Root;
VisionData newVisionData = new VisionData(...);
顺便说一句,如果使用
ToList
扩展方法而不是newlist(…)
可能会使查询变得更简单。或者将VisionData
构造函数更改为接受类型为IEnumerable
的参数,而不是List
,这样您根本不需要在构造函数调用中进行转换。我想您可能需要修改查询,如:
List<VisionData> newVisionData = (from data in visionXML.Descendants(ns + "gcDiversityVision")
select new VisionData(new List<string>(data.Descendants(ns + "Employee").Select(f => f.Element(ns + "EmployeeName").Value)),
new List<string>(data.Descendants(ns + "Employee").Select(f => f.Element(ns + "EmployeeTitle").Value)),
new List<string>(data.Descendants(ns + "Employee").Select(f => f.Element(ns + "include").Attribute("externalPath").Value)),
new List<string>(data.Descendants(ns + "Employee").Select(f => f.Element(ns + "EmployeeVideo").Value)),
data.Element(ns + "LinkHeaderText").Value,
new List<string>(data.Descendants(ns + "Links").Select(f => f.Element(ns + "LinkURL").Value)),
new List<string>(data.Descendants(ns + "Links").Select(f => f.Element(ns + "LinkText").Value)),
new List<string>(data.Descendants(ns + "EmployeeStoryHeaderParagraph").Select(f => f.Element(ns + "EmployeeHeader").Value)),
new List<string[]>(data.Descendants(ns + "EmployeeStoryHeaderParagraph").Select(f => f.Descendants(ns + "EmployeeParagraphs").Select(ep => ep.Element(ns + "EmployeeParagraph").Value).ToArray()))
)).ToList();
List newVisionData=(来自visionXML.substands(ns+“gcDiversityVision”)中的数据)
选择新VisionData(新列表(data.substands(ns+“Employee”)。选择(f=>f.Element(ns+“EmployeeName”).Value)),
新列表(data.subjects(ns+“Employee”).Select(f=>f.Element(ns+“EmployeeTitle”).Value)),
新列表(data.subjects(ns+“Employee”).Select(f=>f.Element(ns+“include”).Attribute(“externalPath”).Value)),
新列表(data.subjects(ns+“Employee”).Select(f=>f.Element(ns+“EmployeeVideo”).Value)),
数据元素(ns+“LinkHeaderText”).值,
新列表(data.substands(ns+“Links”).Select(f=>f.Element(ns+“LinkURL”).Value)),
新列表(data.substands(ns+“Links”).Select(f=>f.Element(ns+“LinkText”).Value)),
新列表(data.substands(ns+“EmployeeStoryHeaderParagraph”).Select(f=>f.Element(ns+“EmployeeHeader”).Value)),
新列表(data.substands(ns+“EmployeeStoryHeaderParagraph”).Select(f=>f.substands(ns+“EmployeeParagraphs”).Select(ep=>ep.Element(ns+“EmployeeParagraphs”).Value.ToArray())
)).ToList();
我正在尝试创建一个VisionData。gcDiversityVision实际上是xml中的根元素。我添加了xml以提供更好的想法。我将在“…”中使用什么来获取VisionData对象的参数,您能给我一个小的e吗
List<VisionData> newVisionData = (from data in visionXML.Descendants(ns + "gcDiversityVision")
select new VisionData(new List<string>(data.Descendants(ns + "Employee").Select(f => f.Element(ns + "EmployeeName").Value)),
new List<string>(data.Descendants(ns + "Employee").Select(f => f.Element(ns + "EmployeeTitle").Value)),
new List<string>(data.Descendants(ns + "Employee").Select(f => f.Element(ns + "include").Attribute("externalPath").Value)),
new List<string>(data.Descendants(ns + "Employee").Select(f => f.Element(ns + "EmployeeVideo").Value)),
data.Element(ns + "LinkHeaderText").Value,
new List<string>(data.Descendants(ns + "Links").Select(f => f.Element(ns + "LinkURL").Value)),
new List<string>(data.Descendants(ns + "Links").Select(f => f.Element(ns + "LinkText").Value)),
new List<string>(data.Descendants(ns + "EmployeeStoryHeaderParagraph").Select(f => f.Element(ns + "EmployeeHeader").Value)),
new List<string[]>(data.Descendants(ns + "EmployeeStoryHeaderParagraph").Select(f => f.Descendants(ns + "EmployeeParagraphs").Select(ep => ep.Element(ns + "EmployeeParagraph").Value).ToArray()))
)).ToList();