由多个节点(Dynamic)组成的XDOCUMENT
我有以下数据作为DataTable进入。如果我将其直接转换为XML,则会获得不错的Xdocument对象。
但是问题是我需要按前4列对其进行分组,以便XML如下所示。我知道DataTable中只有三个节点“段”,“价格”和“ QTY” retars列可能是动态的,并且不能使用硬编码名称(以上3)是否有
<ROOT>
<ROW>
<Col1>CESLP</Col1>
<Col2>MRP</Col2>
<Col3>372</Col3>
<Date>20040101</Date>
<BID_INTERVALS>
<SEGMENT>1</SEGMENT>
<Price>10</Price>
<QTY>5</QTY>
</BID_INTERVALS>
<BID_INTERVALS>
<SEGMENT>2</SEGMENT>
<Price>15</Price>
<QTY>6</QTY>
</BID_INTERVALS>
</ROW>
<ROW>
<Col1>CESLP</Col1>
<Col2>MRP</Col2>
<Col3>372</Col3>
<Date>20040102</Date>
<BID_INTERVALS>
<SEGMENT>1</SEGMENT>
<Price>11</Price>
<QTY>5</QTY>
</BID_INTERVALS>
<BID_INTERVALS>
<SEGMENT>2</SEGMENT>
<Price>14.5</Price>
<QTY>6</QTY>
</BID_INTERVALS>
</ROW>
任何解决方案?我已经陷入了相当长的时间,尝试了Xdocument组的“除外”,但对我没有工作。
edit1:
dataTable.AsEnumerable()
.GroupBy(r => new NTuple<object>(from column in colNames select r[column]))
.Select(g => g.CopyToDataTable()).ToList();
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
从您的问题中的位图中尚不完全清楚,无论您是否有一个
DataTable
还是xdocument
。因此,让我们假设您有一个xdocument
,您想通过其前四列的值将根元素的子行分组,其余值按命名&lt; bid_intervals&gt; 。
可以使用以下扩展方法来实现这一点:
然后,给定一些
xdocument doc
,您可以做:如果,另一方面,您拥有
dataTable DT
而不是<代码> xdocument ,您可以使用以下扩展方法直接将表转换为xdocument
:然后做:
demo fiddle 在这里。
It's not entirely clear from the bitmap in your question whether you intially have a
DataTable
or anXDocument
. So let's assume you have anXDocument
, and you would like to group the child rows of the root element by the values of their first four columns, with the remaining values collected under a sequence of elements named<BID_INTERVALS>
.This can be accomplished using the following extension method:
Then, given some
XDocument doc
, you can do:If, on the other hand, you have a
DataTable dt
not anXDocument
, you can convert the table to anXDocument
directly using the following extension method:And then do:
Demo fiddle here.