我需要从ConnectionString
的{{1}}配置部分获取准确的参数MAINDB
。
ServerConfig
我已经尝试过使用Linq的几种方法但没有成功。
我的最后一次尝试:
<?xml version="1.0" encoding="utf-8" ?>
<ServerConfig>
<config section="MAINDB">
<parameter type="ConnectionString">"CONNSTRING"</parameter>
<parameter type="ConnectionString1">"CONNSTRING1"</parameter>
<parameter type="ConnectionString2">"CONNSTRING2"</parameter>
<parameter type="ConnectionString3">"CONNSTRING3"</parameter>
</config>
<config section="OTHERDB">
<parameter type="ConnectionString">"CONNSTRING"</parameter>
<parameter type="ConnectionString1">"CONNSTRING1"</parameter>
<parameter type="ConnectionString2">"CONNSTRING2"</parameter>
<parameter type="ConnectionString3">"CONNSTRING3"</parameter>
</config>
<config section="OTHERPARAM">
<parameter type="OtherString">"OTHERSTRING"</parameter>
</config>
</ServerConfig>
从所有部分中选择所有参数。
如何撰写此查询?
答案 0 :(得分:1)
这种情况在这里使用xpath更加清晰。 LINQ to XML查询可能会有点冗长。
const string configSection = "MAINDB";
const string parameterType = "ConnectionString";
// using xpath //
var xpath = String.Format(
"/ServerConfig/config[@section='{0}']/parameter[@type='{1}']",
configSection, parameterType
);
var query1 = (string)doc.XPathSelectElement(xpath);
// using LINQ //
var query2 =
(from config in doc.Elements("ServerConfig").Elements("config")
where (string)config.Attribute("section") == configSection
from parameter in config.Elements("parameter")
where (string)parameter.Attribute("type") == parameterType
select (string)parameter).FirstOrDefault();
答案 1 :(得分:0)
var connectionString = (from c in xdoc.Root.Elements("config")
where (string) c.Attribute("section") == "MAINDB"
from p in c.Elements("parameter")
where (string) p.Attribute("type") == "ConnectionString"
select (string) p).FirstOrDefault();
connectionString
将包含您的值,如果找不到则会null
。