我正在收集來自兩個不同源的數據,目的是填充單個對象。我的班級將來自不同源的兩個LINQ查詢合併爲單個對象
public class SampleClient
{
public string ClientId { get; set; }
public string JobName { get; set; }
public string JobUrl { get; set; }
public string Version { get; set; }
}
第一LINQ查詢填充SampleClient
對象獲得的所有版本除外值的集合。然後我需要遍歷SampleClient
的集合,並在第二個查詢中使用ClientId
值。第二個查詢的結果是版本值。這是我的第一個LINQ查詢:
private void btnProjects_Click(object sender, EventArgs e)
{
string[] stringArray = { "demo", "sample", "test", "training" };
List<SampleClient> jobList =
(
from x in XDocument.Load(XML URL VALUE HERE).Root.Elements("job")
where x.Element("name").Value.Contains("-config") && x.Element("name").Value.StartsWith("oba-")
&& (!stringArray.Any(s => x.Element("name").Value.Contains(s)))
select new SampleClient
{
ClientId = getClientId((string)x.Element("name")),
JobName = (string)x.Element("name"),
JobUrl = (string)x.Element("url"),
}).ToList();
foreach (SampleClient job in jobList)
{
//Display the results in a textbox
txtResults.Text += "Job Name = " + job.JobName + " | Job URL = " + job.JobUrl + " | ";
}
}
在其取得上述版本的查詢,我目前有:
var version = from item in doc.Descendants(ns + "properties")
select new SampleClient
{
ClientId = strClientId,
Version = (string)item.Element(ns + "product.version").Value
};
需要注意的是在第二查詢中使用的URL源創建使用是非常重要的從第一個獲得的ClientId
。我可以通過一個例程循環來清理/合併對象,但這感覺像是一種黑客攻擊。有沒有更好的方法來處理這個問題?
這是從第一查詢的XML示例:
<?xml version="1.0"?>
<allView>
<description>PROD</description>
<job>
<name>abc</name>
<url>http://ci-client.company.net/job/abc/</url>
<color>blue</color>
</job>
<job>
<name>acme</name>
<url>http://ci-client.company.net/job/acme/</url>
<color>blue</color>
</job>
</allView>
第二個查詢URL被動態地通過使用clientID的從第一的結果創建的。我使用它來加載Maven POM文件並獲取版本信息。這是來自POM文件的XML片段。
<?xml version="1.0" encoding="UTF-8" ?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.company.xyz</groupId>
<artifactId>io</artifactId>
<version>6.11.7-ACME-SNAPSHOT</version>
<packaging>pom</packaging>
<properties>
<product.version>6.11.7</product.version>
<db.version>1.4</db.version>
</properties>
<modules>
<module>policies</module>
<module>templates</module>
<module>assemble</module>
</modules>
</project>
在哪裏呢strClientId來自於第二個查詢? –
意圖(雖然功能尚未完善)是它會來自循環第一個查詢的結果。換言之,它是由第一個查詢創建的SampleClient集合中的ClientId。我希望這是有道理的。 –
顯示您的XML源代碼示例。 – dtb