linq初学!求教一个问题

weixin_38218327 2017-10-16 10:37:58
问题跟xml内容关系应该也不大啦 是这样 我一开始写的查询是这样的

var data_aggre = from data in table.Descendants("Value")
where data.Attribute("Type").Value == "Fields"
select data.Elements("Data");

这个查询结果在foreach遍历时

foreach(var detail in data_aggre)
{
dt.Columns.Add(detail.Value);
}

会报错 说XElement未包含Value的定义
后来自己查了查论坛里的帖子
改成了这样就可以了

var data_aggre =( from data in table.Descendants("Value")
where data.Attribute("Type").Value == "Fields"
select data).Elements("Data");

请问各位大佬,这两种写法区别在哪里呢?
下面这样写 data_aggre的子元素不也是XElement吗?
...全文
878 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
正怒月神 2017-10-16
  • 打赏
  • 举报
回复
其实你只要看下面的var 就知道类型了。 var data_aggre = from data in table.Descendants("Value") where data.Attribute("Type").Value == "Fields" select data.Elements("Data");
欧皇神降术 2017-10-16
  • 打赏
  • 举报
回复
第一个返回的是一个IEnumerable集合(IEnumerable<IEnumerable<XElement>>),但是里面的元素也是IEnumerable集合(data.Elements("Data")),所以没有Value这个属性。第二个返回的是IEnumerable集合,里面的元素是XElement类,所以有Value属性。
exception92 2017-10-16
  • 打赏
  • 举报
回复
鼠标放到Elements上会有相应的解释,第二种是个扩展方法吧,Elements返回的是集合,Element返回的是单个XElement元素。
weixin_38218327 2017-10-16
  • 打赏
  • 举报
回复
我又看了下。。。好像第一种返回的结果是IEnumerable<XElement> 第二个返回的是XElement

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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