0

私はlinqがあまり得意ではないので、Linqクエリを記述して、code = "111" && isDisplay = "Y"の場合に子トピックノードが存在するかどうかを確認しようとしました。2番目のメソッドで.Any条件を使用していますが、それでも私はこれについてはよくわかりません。

static void Main(string[] args)
{
    XElement rootElement = XElement.Load("TestXML.xml");
    int StyCode = 1;
    var lv1s = from lv1 in rootElement.Descendants("Class")
               where lv1.Attribute("Code").Value.Equals("001")
               select (from ltd in lv1.Descendants("Subject")
                       where ltd.Attribute("Course").Value.Equals("Engish")
                       select GetChildFromSubject(StyCode, ltd)).FirstOrDefault();

       }

private static bool GetChildFromSubject(int styCode, XElement subject)
{
    if (styCode == 0)
        return subject.Attribute("SpeciaGuest").Value.Equals("Y");
    else
    {
        //Below is the main issue with and condition on attributes.
        return subject.Attribute("AllTeachers").Value.Equals("Y") ||
               subject.Elements("Topic").Attributes("Code")
               .Any(x => x.Value.Equals("111")) &&       subject.Elements("Topic").Attributes("isDisplay")
                        .Any(y => y.Value.Equals("Y"));
    }
}

以下はXMLファイルです

<Class Code="002">
    <Subject Course="Math" AllTeachers='Y' SpeciaGuest='N'>
      <Topic Code="1" isDisplay="Y">LAW1</Topic>
      <Topic Code="2" isDisplay="Y">
        LAW2
      </Topic>
      <Topic Code="3" isDisplay="N">
        LAW3
      </Topic>
    </Subject>
    <Subject Course="Engish" AllTeachers='N' SpeciaGuest='Y'>
      <Topic Code="111" isDisplay="Y">LAW1</Topic>
    </Subject>
    <Subject Course="History" AllTeachers='Y' SpeciaGuest='Y'></Subject>
  </Class>
4

1 に答える 1

0

あなたのコメントによると:

マグナム:code = "111" && isDisplay = "Y"の場合、トピックノードが存在することを確認したい

code=111およびisDiaply=Yの場合にTOPICノードを返そうとしている場合、これがLINQクエリのワンショットです。

List<XElement> subjects = template.Descendants("Subject")
            .Elements("Topic")
                .Where(elementNode => elementNode.Attribute("Code").Value == "111" && elementNode.Attribute("isDisplay").Value == "Y").ToList();
于 2013-01-31T18:06:44.127 に答える