3

我需要一些帮助来返回属性的不同值。我试图用谷歌搜索我的方式,但没有那么成功。

我的 xml 是这种格式:

<?xml version="1.0" encoding="utf-8"?>
<threads>
  <thread tool="atool" process="aprocess" ewmabias="0.3" />
  <thread tool="btool" process="cprocess" ewmabias="0.4" />
  <thread tool="atool" process="bprocess" ewmabias="0.9" />
  <thread tool="ctool" process="aprocess" ewmabias="0.2" />
</threads>

我想返回不同的工具和流程属性。我确实更喜欢 linq 解决方案。

IEnumerable<XElement> singlethread = apcxmlstate.Elements("thread");

.. mytool = 包含不同工具的数组/列表,即 {atool, btool, ctool}

感谢任何帮助。

4

1 回答 1

4

我想返回不同的工具和流程属性。

听起来你想要这个:

var results = 
    from e in apcxmlstate.Elements("thread")
    group e by Tuple.Create(e.Attribute("process").Value, 
                            e.Attribute("tool").Value) into g
    select g.First().Attribute("tool").Value;

或流利的语法:

var results = apcxmlstate
    .Elements("thread")
    .GroupBy(e => Tuple.Create(e.Attribute("process").Value, 
                               e.Attribute("tool").Value))
    .Select(g => g.First().Attribute("tool"));

给定您的示例集,这将返回tool每个不同tool/对的。但是,如果您想要的只是不同的值,您可以这样做:process{ "atool", "btool", "atool", "ctool" }tool

var results = apcxmlstate
    .Select(e => e.Attribute("tool").Value)
    .Distinct();

哪个会给你{ "atool", "btool", "ctool" }

于 2013-07-30T04:25:16.323 回答