【问题标题】:Convert IEnumerable<List<string>> to IEnumerable<string> without third variable在没有第三个变量的情况下将 IEnumerable<List<string>> 转换为 IEnumerable<string>
【发布时间】:2016-01-17 07:46:14
【问题描述】:

代码:

XElement elem = XElement.Load("http://localhost:54002/sample.xml");

IEnumerable<List<String>> elem1 = (from member in elem.Elements("member")
                            where (String.Equals(member.Attribute("class").Value, "prem", StringComparison.OrdinalIgnoreCase))
                            select member.Elements("customer").Select(f => f.Value.ToString()).ToList());

 IEnumerable<string> out; // required output format
 foreach (List<string> temp in elem1)
        {
           out  = temp;
        }

Sample.XML

<root>
<member class="gold">
        <customer>cust3</customer>
        <customer>cust5</customer>
        <customer>cust8</customer>
        <customer>cust1</customer>
</member>
<member class="prem">
        <customer>cust5</customer>
        <customer>cust1</customer>
        <customer>cust3</customer>
        <customer>cust2</customer>
</member>
<member class="silver">
        <customer>cust5</customer>
        <customer>cust8</customer>
        <customer>cust1</customer>
        <customer>cust4</customer>
</member>
</root>

我需要在不使用 foreach 循环的情况下以 IEnumerable 字符串格式返回 linq 输出。简而言之,linq 查询本身应该返回所需的输出。

【问题讨论】:

    标签: linq linq-to-xml


    【解决方案1】:

    您可以在 LINQ fluent 语法中使用SelectMany() 直接返回List&lt;string&gt;

    IEnumerable<string> _out; // required output format
    _out = elem.Elements("member")
               .Where(o => string.Equals(o.Attribute("class").Value, "prem", StringComparison.OrdinalIgnoreCase))
               .SelectMany(o => o.Elements("customer"))
               .Select(o => o.Value);
    

    或者在查询语法中使用from子句两次返回相同,例如:

    IEnumerable<string> _out; // required output format
    _out = (from member in elem.Elements("member")
            where String.Equals(member.Attribute("class").Value, "prem", StringComparison.OrdinalIgnoreCase)
            from customer in member.Elements("customer")
            select customer.Value);
    

    Dotnetfiddle Demo

    【讨论】:

      猜你喜欢
      • 2018-08-04
      • 1970-01-01
      • 1970-01-01
      • 2011-06-11
      • 1970-01-01
      • 1970-01-01
      • 2015-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多