1

我有一个 xml 文档,其中包含以下格式的 3 个元素:

<Codes>
    <Code>
        <CodeScenario>3</CodeScenario>
        <CodeScenario>4</CodeScenario>
        <CodeScenario>6</CodeScenario>
        <CodeScenario>7</CodeScenario>
        <CodeCategory>Category3</CodeCategory>
        <CodeID>043</CodeID>
        <CodeDescription>Description3</CodeDescription>
        <CodeType>PE</CodeType>
        </Code>
    <Code>
        <CodeCategory>Category2</CodeCategory>
        <CodeID>046</CodeID>
        <CodeDescription>Description2</CodeDescription>
        <CodeType>PE</CodeType>
    </Code>
    <Code>
        <CodeScenario>2</CodeScenario>
        <CodeCategory>Category1</CodeCategory>
        <CodeID>100</CodeID>
        <CodeDescription>Description1</CodeDescription>
        <CodeType>PR</CodeType>
    </Code>
</Codes>

我希望能够使用 linq 查询来告诉我代码元素是否具有基于 ID 的代码类型。到目前为止,这是我想出的。它有效,但它很丑陋,如果可能的话,我更喜欢使用点表示法。有人可以帮帮我吗?

public bool HasCodeType(string CodeType, string Code)
{
    var QueryResult = (from descendant in XMLdocument.Descendants("Code")
                       from type in descendant.Elements("CodeType")
                       where type != null &&
                             type.Value.Equals(CodeType)
                       select new { CID = descendant.Element("CodeID").Value }).Distinct();

    foreach (var result in QueryResult)
    {
        if (Code == result.CID)
            return true;
    }

    return false;
}
4

1 回答 1

1

找到第一个可能最简单CodeType,然后“上下”:

// Note camelCase for variable names, not PascalCase.
var query = document.Descendants("CodeType")
                    .Where(type => type.Value == codeType)
                    .Select(type => (string) type.Parent.Element("CodeID"))
                    .Where(id => id == null)
                    .Distinct();

第二个Where子句是避免获取没有兄弟元素null的元素的值。CodeTypeCodeID

但是,如果您对查询所做的只是检查给定 ID 的存在,则无需费心:

return document.Descendants("Code")
               .Any(code => (string) code.Element("CodeType") == codeType &&
                            (string) code.Element("CodeID") == codeId));

真的很简单。

于 2012-09-21T19:42:50.507 回答