我在這裏有一個Linq XML查詢,但在我查詢的XML文檔中有很多重複的元素值被返回。到目前爲止,我的代碼在用數據構建樹視圖之前過濾掉了重複的內容,這並沒有造成問題。Linq to XML從結果中刪除重複項
但是,我注意到,如果有很多很多系統和子系統元素具有相同的值,我的程序顯着減速。這是因爲我的程序在過濾出重複條目之前運行了一段代碼。我認爲在Linq階段進行篩選會更有效率。 唯一的問題是,我不知道如何。
我的XML的示例如下圖所示,這裏是我的Linq查詢:
XDocument doc = XDocument.Load(CSDBpath + projectName + "\\Data.xml");
var subsys = from sub in doc.Descendants("dataModule")
where sub.Descendants("system").First().Value == sys
select sub.Descendants("subsystem").First().Value;
foreach (var mysub in subsys)
{
buildSubSystemNodes(sys, mysub);
getUnits(sys, mysub);
}
所以目前可能有數百個來自LINQ查詢colected複製「SUBSYS」變量。我需要在我的foreach循環之前將它們過濾掉。
繼承人xml文件的摘錄。如您所見,所有這三個條目都具有相同的Sys,Subsys和Subsubsys元素值。有時候有幾百個一樣的。我需要刪除重複項。請幫忙!!
<DMs>
<dataModule>
<DMC>DMC-PO-A-32-11-00-00A-00BA-C_001.SGM</DMC>
<techName>Main Landing Gear</techName>
<infoName>List of support equipment (normally used in front matter)</infoName>
<modelic>PO</modelic>
<system>32</system>
<subsystem>11</subsystem>
<subsubsystem>00</subsubsystem>
<status>Checked In</status>
<notes>-</notes>
<currentUser>-</currentUser>
<validator>-</validator>
<dateMod>-</dateMod>
<size>-</size>
</dataModule>
<dataModule>
<DMC>DMC-PO-A-32-11-00-00A-00CA-C_001.SGM</DMC>
<techName>Main Landing Gear</techName>
<infoName>List of supplies (normally used in front matter)</infoName>
<modelic>PO</modelic>
<system>32</system>
<subsystem>11</subsystem>
<subsubsystem>00</subsubsystem>
<status>Checked In</status>
<notes>-</notes>
<currentUser>-</currentUser>
<validator>-</validator>
<dateMod>-</dateMod>
<size>-</size>
</dataModule>
<dataModule>
<DMC>DMC-PO-A-32-11-00-00A-005A-C_001.SGM</DMC>
<techName>Main Landing Gear</techName>
<infoName>Lists of abbreviations</infoName>
<modelic>PO</modelic>
<system>32</system>
<subsystem>11</subsystem>
<subsubsystem>00</subsubsystem>
<status>Checked In</status>
<notes>-</notes>
<currentUser>-</currentUser>
<validator>-</validator>
<dateMod>-</dateMod>
<size>-</size>
</dataModule>
<dataModule>
</DMs>
確定,即性能瓶頸不在'buildSubSystemNodes'或'getUnits '? –
檢查此問題:http://stackoverflow.com/questions/4085065/xml-linq-removing-duplicate-nodes-in-xelement-c-sharp –
@IlyaIvanov - 我一直試圖調試代碼整個下午,並且我可以看到上述提取出來的XML文件和另一個不帶性能問題的XML文件之間唯一的區別是這個文件有很多重複的條目。這是唯一的區別。另一個相似的大小運行我的代碼,並在大約4秒內生成我的treeView。上述內容取自的XML文件需要長達3分鐘。我失去了它可能的其他東西。感謝下面的代碼,我會明天嘗試並相應地標記它。 – Daedalus