在没有第三个变量的情况下将 IEnumerable<List<string>> 转换为 IEnumerable<string>
Convert IEnumerable<List<string>> to IEnumerable<string> without third variable
代码:
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>
我需要 return linq 以 IEnumerable 字符串格式输出而不使用 foreach 循环。简单来说,linq 查询本身应该 return 所需的输出。
你可以在LINQ fluent语法中使用SelectMany()
直接returnList<string>
:
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
子句与return相同,例如:
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);
代码:
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>
我需要 return linq 以 IEnumerable 字符串格式输出而不使用 foreach 循环。简单来说,linq 查询本身应该 return 所需的输出。
你可以在LINQ fluent语法中使用SelectMany()
直接returnList<string>
:
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
子句与return相同,例如:
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);