Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 帮助使用Linq和XML创建类的实例_C#_Xml_Linq - Fatal编程技术网

C# 帮助使用Linq和XML创建类的实例

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

我正在尝试使用Linq和XML创建一个类的实例。我的代码中出现以下错误,不知道如何修复它。我的代码编辑器告诉我以下代码中的“选择”是罪魁祸首。我是Linq的新手,所以非常感谢您的帮助

无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“gcDiversityVision.VisionData”。存在显式转换(是否缺少强制转换?)

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();