[英]How to read Xml File Using LINQ in C#
我有一個XML文件,例如
<root>
<Child val1="1" val2="2"/>
<Child val1="3" val2="4"/>
<Child val1="5" val2="6"/>
<Child val1="7" val2="8"/>
<Child val1="9" val2="10"/>
<Child val1="11" val2="12"/>
<Child val1="13" val2="14"/>
</root>
我需要將val1
和val2
的屬性值讀取到List<String>
結果列表將包含
{ "1" , "2" , "3" , ........ ,"13" , "14" }
這是我的示例代碼:
XDocument XD = XDocument.Load(Application.StartupPath + "\\foo.xml");
List<String> l_lstTemp = XD.Descendants("Child")
.Select(X => new List<String> { X.Attribute("val1").Value,
X.Attribute("val2").Value })
.SelectMany(X => X)
.Distinct()
.ToList();
有什么辦法可以使用Select
而不是selectMany
來做到這一點?
如何修改我現有的expression
?
SelectMany
正是在這里您想要做的-將結果從一系列字符串列表展平為單個字符串序列。 您為什么要采用能准確表達所需內容的工作代碼並進行更改?
誠然,您可以通過使用SelectMany
稍有不同來簡化它,並使用數組而不是列表來簡化它:
XDocument doc = XDocument.Load(Application.StartupPath + "\\foo.xml");
List<String> values = doc.Descendants("Child")
.SelectMany(x => new[] { x.Attribute("val1").Value,
x.Attribute("val2").Value })
.Distinct()
.ToList();
您的問題場景正是SelectMany所能解決的,因此我認為我們為消除該問題可能會做的任何事情都會使事情復雜化。 :)
最初的.Select返回IEnumerable的結果,如果沒有.SelectMany,我們將得到:
{
IEnumerable<string> [ "1", "2" ]
IEnumerable<string> [ "3", "4" ]
etc...
}
.SelectMany使用一個IEnumerable會將初始結果“展平”到另一個IEnumerable中,從而為您提供所需的內容:
{
IEnumerable<string> [ "1", "2", "3", "4" ]
}
這是一篇很棒的文章,更好地描述了LINQ SelectMany運算符的外觀 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.