1

この形式の 3 つの要素を持つ xml ドキュメントがあります。

<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();

2 番目の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 に答える