XML中的Linq 联合查询

jcyluck 2009-02-24 03:57:00
XML文件

Hire.dll
- <费用>
- <A701>
<D200808 日期="2008-9-02" 水度="1" 电度="1" />
</A701>
<A702 />
<D200809 日期="2008-10-03" 水度="8" 电度="56" />
</A702>
<A703 />
</费用>

Hire_Exps.dll:

- <其他>
- <A701>
<使用人 item="4" prd="LIIN" />
</A701>
<A702 />
<使用人 item="24" prd="LIAE" />
</A702>
<A703 />
</其他>

想实现以下功能:
有两个XML文件,这两个文件中有一相同名称的子节点,想用这个相同名称子节点进行联接,并获得一个新的XElement
按照上面两个文件,即我想得出的结果是用A701这个节点名相同联合查询两个文件,得到一个新的XML文件
下面的代码是按照MSDN上的帮助依葫芦画瓢所作
但系统提示:join 子句中其中一个表达式的类型不正确。对“Join”的调用中的类型推理失败。


XElement xel = XElement.Load(Form1.__filepath + @"\Hire.dll");
XElement xel1 = XElement.Load(Form1.__filepath + @"\Hire_Exps.dll");

IEnumerable <XElement> attList = from at in xel.Elements()
join bt in xel1.Elements() on at equals bt.Name.ToString()
select new { xelement = at.Elements(), xelbt = bt.Elements()};


问各路高手,正确代码应该如何写。

...全文
292 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jcyluck 2009-02-25
  • 打赏
  • 举报
回复
谢谢:Garnett_KG
我居然忘记了使用了VAR类型
Garnett_KG 2009-02-24
  • 打赏
  • 举报
回复

XElement l1 = XElement.Load(Form1.__filepath + @"\Hire.dll");
XElement l2 = XElement.Load(Form1.__filepath + @"\Hire_Exps.dll");

var t = from l1 in el1.Elements()
join l2 in el2.Elements()
on l1.Name equals l2.Name
select new
{
XLeft = l1.Elements(),
XRight= l2.Elements()
}
;
foreach (XElement o in t.First().XLeft)
{
Console.WriteLine(o.Name);
}
foreach (XElement o in t.First().XRight)
{
Console.WriteLine(o.Name);
}
Console.Read();

soaringbird 2009-02-24
  • 打赏
  • 举报
回复
这个我也不太清楚了。加强制转换前是不能编译的,所以改成了var,后来又试了试强制转换,也是可以的。我的vs是带sp1的
jcyluck 2009-02-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 soaringbird 的回复:]
IEnumerable <XElement> attList = (IEnumerable <XElement>)from at in xel.Elements()
join bt in xel1.Elements() on at.Name.ToString() equals bt.Name.ToString()
select new { xelement = at.Elements(), xelbt = bt.Elements() };
[/Quote]

谢谢 soaringbird ,但仍然出现错误,不知道是什么原因

无法将类型为“<JoinIterator>d__67`4[System.Xml.Linq.XElement,System.Xml.Linq.XElement,System.String,<>f__AnonymousType0`2[System.Collections.Generic.IEnumerable`1[System.Xml.Linq.XElement],System.Collections.Generic.IEnumerable`1[System.Xml.Linq.XElement]]]”的对象强制转换为类型“System.Collections.Generic.IEnumerable`1[System.Xml.Linq.XElement]”。
soaringbird 2009-02-24
  • 打赏
  • 举报
回复
IEnumerable<XElement> attList = (IEnumerable<XElement>)from at in xel.Elements()
join bt in xel1.Elements() on at.Name.ToString() equals bt.Name.ToString()
select new { xelement = at.Elements(), xelbt = bt.Elements() };
soaringbird 2009-02-24
  • 打赏
  • 举报
回复
var attList = from at in xel.Elements()
join bt in xel1.Elements() on at.Name.ToString() equals bt.Name.ToString()
select new { xelement = at.Elements(), xelbt = bt.Elements() };

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧