XML文件上的条件LINQ查询

本文关键字:LINQ 查询 条件 文件 XML | 更新日期: 2023-09-27 17:59:10

如果您能为我在XML文件上执行的LINQ查询提供帮助,我将不胜感激。我在搜索中找不到任何适用于我的情况的内容,但我必须承认,我仍在努力找出LINQ。所以,如果这是一个重复,我提前道歉,我忽略了一些东西。

我有一个XML文件,它是在应用程序启动时创建和填充的。我正在搜索这个XML文件,并试图列出在"Citrix"下仅针对给定主机名找到的所有"Connection"元素。

因此,例如,给定下面的XML文件,我只想返回
如果选择了"client2",则为"desktop3"answers"desktop4"。

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>

我可以获得所有ThinClients上所有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;
}

XML文件上的条件LINQ查询

这应该会给你想要的:

_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")
             });

文档。元素("ThinClient")。其中(e=>e.Element("主机名").Value==主机名)。剩余代码