我是使用LINQ的新手。我想使用LINQ来检索给定字符串的某个值。我有一个包含以下格式的XML文档(files.xml)。
<?xml version="1.0" encoding="utf-8" ?>
<DocumentMappings>
<DocumtentCategory>
<CategoryId>001</CategoryId>
<CategoryName>Checksheet and Lists</CategoryName>
<DestinationDocumentLibrary>CheckList and Lists</DestinationDocumentLibrary>
<Multiple>false</Multiple>
</DocumtentCategory>
<DocumtentCategory>
<CategoryId>011</CategoryId>
<CategoryName>Product Information</CategoryName>
<DestinationDocumentLibrary>Product Information</DestinationDocumentLibrary>
<Multiple>true</Multiple>
</DocumtentCategory>
</DocumentMappings>
问题
如何使用LINQ将“DestinationDocumentLibrary”的值作为“Checksheet and Lists”的“CategoryName”的字符串进行检索。
在上面的示例中,“Checksheet and Lists”作为参数(字符串)传递,并将动态传递给LINQ查询。
希望问题清楚,并提前多多感谢。
答案 0 :(得分:1)
尝试一下:
public string GetDestination(string categoryName, XDocument xDoc)
{
var query = (from x in xDoc.Descendants("DocumetentCategory")
where ((string)x.Element("CategoryName")).Contains(categoryName)
select (string)x.Element("DestinationDocumentLibrary")).SingleOrDefault();
return (string)query;
}
xDoc是一个包含xml的XDocument。
答案 1 :(得分:0)
var values = doc.Descendants("DocumtentCategory")
.Where(x => x.Descendants("CategoryName")
.Where(x1 => x1.Value == "Checksheet and Lists").Any())
.Select(x => x.Descendants("DestinationDocumentLibrary").First().Value)
.ToList();
答案 2 :(得分:0)
这可能不是最好的,但似乎有效:
XDocument doc = XDocument.Parse(xml);
var s = doc.Descendants("DestinationDocumentLibrary")
.Where(e => e.Parent.Element("CategoryName")
.Value
.Equals("Checksheet and Lists"))
.FirstOrDefault()
.Value;
并且只是为了完整性 - 获取Linqpad的副本以测试这种事情。