对于我在XML文件上执行的LINQ查询,我将不胜感激。我无法在我的搜索中找到适用于我的情况的任何内容,但我不得不承认我仍在努力找出LINQ。所以,如果这是一个重复,我提前道歉,我忽略了一些事情。
我有一个XML文件,在应用程序启动时创建并填充。我正在搜索这个XML文件并尝试列出所有" Connection"在" Citrix"仅限给定的主机名。
因此,例如,给定以下XML文件,我只想返回
" desktop3"和" desktop4"如果" client2"被选中。
XML文件示例:
<ThinClients>
<ThinClient>
<Status>OK</Status>
<Hostname>client1</Hostname>
<Citrix>
<Connection>
<ConnectionName>desktop1</ConnectionName>
<XendesktopIP>192.168.0.10</XendesktopIP>
</Connection>
<Connection>
<ConnectionName>desktop2</ConnectionName>
<XendesktopIP>192.168.0.20</XendesktopIP>
</Connection>
</Citrix>
<ThinClient>
<ThinClient>
<Status>OK</Status>
<Hostname>client2</Hostname>
<Citrix>
<Connection>
<ConnectionName>desktop3</ConnectionName>
<XendesktopIP>192.168.0.30</XendesktopIP>
</Connection>
<Connection>
<ConnectionName>desktop4</ConnectionName>
<XendesktopIP>192.168.0.40</XendesktopIP>
</Connection>
</Citrix>
<ThinClient>
<ThinClients>
我能够获得所有ThinClient上所有Citrix连接的列表,但我很难获得指定主机名的连接。
以下内容返回所有主机的所有Citrix连接,但我无法理解如何进一步将其与主机名隔离,因为主机名位于XML链的上方。
public ObservableCollection<CitrixConnections> GetCitrixConnectionListByHostname(string Hostname)
{
IEnumerable<CitrixConnections> clients =
(from client in _Document.Elements("ThinClient").Elements("Citrix").Elements("Connection")
select new CitrixConnections
{
ConnectionName = client.Element("ConnectionName").Value,
XendesktopIP = client.Element("XendesktopIP").Value,
});
var clientsAsObservableCollection = new ObservableCollection<CitrixConnections>(clients);
return clientsAsObservableCollection;
}
答案 0 :(得分:2)
这可以给你你想要的东西:
_Document
.Root
.Elements("ThinClient")
.Where(x => (string) x.Element("Hostname") == somevalue)
.SelectMany(x => x.Descendants("Connection"))
.Select(x => new CitrixConnections
{
ConnectionName = (string) x.Element("ConnectionName"),
XendesktopIP = (string)x.Element("XendesktopIP")
});
答案 1 :(得分:-2)
Document.Elements(&#34; ThinClient&#34;)。where(e =&gt; e.Element(&#34; Hostname&#34;)。Value == hostname).remaining code