当前位置: 首页 > 编程语言 > C#

当XElements具有相同名称时,如何使用LINQ查询来获取XElement值分享

时间:2023-04-11 00:04:12 C#

C#学习教程:当XElements同名时,如何使用LINQ查询获取XElement值我想要的是一个LINQ查询,它生成一个我可以指定为DataGrid数据源的IEnumerable。到目前为止我有以下内容:vartemp=fromrecordintable.Elements("Record")selectrecord.Element("Field").Value我可以有多个字段元素的事实是我的绊脚石。在上面的例子中,我需要的是类似IEnumerable的东西。数据网格如下所示:Value1_1,Value1_2Value2_1,Value2_2这样的事情会有帮助吗?vara=fromrecordintable.Elements("Record")selectnew{one=(string)record.Elements().ElementAt(0),two=(string)record.Elements().ElementAt(1)};听起来您想对该字段进行非规范化,使其适合数据网格中的1列。以下有帮助吗?vartable=XElement.Parse(@"Value1_1Value1_2Value2_1Value2_2");vartemp=fromrecordintable.Elements("Record")fromfieldinrecord.Elements("Field")groupfield.ValuebyrecordintogroupedFields选择groupedFields。聚合((l,r)=>l+“,”+r);foreach(varrowintemp)Console.WriteLine(row);控制台.ReadKey();免责声明:我不再使用SQL或LINQ,所以这可能会更好。随意更改它。我不知道问题是什么以及为什么这些答案看起来很复杂:-/这是我的产品:varr=(fromrecordintable.Elements("Record")select(fromelementinrecord.Elements("Field")选择元素.Value));//=>IEnumerable>内部IEnumerable用于列,外部用于行。(问题有点乱,因为没有IEnumerable,上面是我改编的intent。)你可以把里面的IEnumerable变成一个字符串(比如Joinon","),但是如果你把值表示为列,然后放入进入网格不是很有趣!varr=(fromrecordintable.Elements("Record")selectString.Join(",",record.Elements("Field").Select(f=>f.Value).ToArray());//=>IEnumerable如果我真的了解LINQ表达式,上面的内容可能会更好。但是,它可以工作并涵盖“其他”情况-“ToArray”在.NET3.5及以下版本中工作。也许这个?使用System.Linq;使用System.Xml.Linq;使用System.Collections.Generic;使用系统诊断;[测试方法]publicvoidLinq_XElement_Test(){stringxml=@"Value1_1Value1_2Value2_1Value2_2";(xml);varqryRecords=fromrecordinelements.Elements("Record")选择记录;foreach(varrecinqryRecords){Debug.WriteLine(rec.Value);}varqryFields=fromrecordinelements.Elements("Record")fromfieldsinrecord.Elements("Field")选择字段;foreach(varfilinqryFields){Debug.WriteLine(fil.Value);}IEnumerable列表=qryFields.Select(x=>x.Value);foreach(列表中的字符串项){Debug.WriteLine(item);您可以链接到Elements()调用:vartemp=fromfieldintable.Elements("Record").Elements("Field")选择字段。价值;您还可以使用Descendants():vartemp=fromfieldintable.Descendants("Field")selectfield.Value;但是,这将返回下面的所有元素,即使它们不在元素中也是如此。您需要两个步骤:注释记录(而不是属性),然后枚举字段并将值传递给匿名类进行绑定,像这样:stringxml=[string-goes-here];XElementelem=XElement.Parse(xml);整数计数=0;foreach(XElementrecordElemsinelem.Elements("Record")){recordElems.SetAttributeValue("id",count);计数++;}vartemp=fromrecordinelem.Elements("Record")fromfieldinrecord.Elements("Field")selectnew{Record="Record"+record.Attribute("id").Value,Field=field.价值};foreach(varitemintemp){Console.WriteLine("{0}:{1}",item.Record,item.Field);我可能正在寻找你正在寻找的东西,但你正在寻找这样的东西吗?DataSetds=newDataSet("记录DS");ds.Tables.Add("记录");foreach(XElementrecordintable.Descendants("Record")){vartemp=fromrinrecord.Descendants("Field")selectr.Value;字符串[]数据=temp.ToArray();if(datum!=null&&datum.Length>0){foreach(stringsindatum)ds.Tables[0].Columns.Add();DataRow行=ds.Tables[0].NewRow();row.ItemArray=数据;ds.Tables[0].Rows.Add(行);}}然后在返回ds并将DataMember设置为“Records”之后呃......我认为你使用了错误的LINQ范例来解决这个问题你应该使用LINQtoXML,这可能与你期望的略有不同。查看此链接:http://msdn.microsoft.com/en-us/library/bb308960.aspx它使用类似于您提供的结构的示例对其进行了解释。会吗?IEnumerable>工作?(不知道如何让它显示为内联)varrecordList=fromrecordindata.Elements("record")selectrecord;列表>x=新列表>(recordList.Count());foreach(varrecordinrecordList){varz=fromfieldinrecord.Elements("field")selectfield.Value;x.Add(z.ToList());}返回x.AsEnumerable();不确定这是否适用于您的特定情况。vardetail1=ds.tbl_Looking_Fors来自d,其中d.Profile_ID==id选择d.Looking_For;以上就是C#学习教程:XElements同名时如何使用LINQ查询获取XElement值共享的全部内容,如果对大家有用需要进一步了解C#学习教程,希望大家多多付出注意——string[]datum=detail1.ToArray();if(datum!=null&&datum.Length>0){foreach(varrowindatum){Label6.Text=datum[0]+","+datum[1];}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: