Linq двухуровневый фильтр
Я не смог заставить двухуровневый фильтр работать с помощью Linq.
Расклеили несколько
1) xml-выдержка и
2) фрагмент кода с двумя объектами данных, LineItem и LineList и запросом.
Цель firstQuery-создать список объектов LineList, каждый из которых имеет подсписок, содержащий один или несколько объектов LineItem.
Я хочу начать с фильтрации по атрибуту уровня раздела (section) (lvl), чтобы сузить свой поиск. Во-вторых, я хочу выбрать подраздел (подраздел), в зависимости от элемента("подраздел").Атрибут ("ssn").
Объединенный оператор "where" показывает намерение моего фильтра.
Он проверяет только первое вхождение lvl и ssn и не углубляется в раздел, чтобы проверить следующее значение ssn, если первое не совпадает.
Я пробовал различные способы добавления дополнительного уровня предложений " от " и "где", но я не могу точно определить порядок и синтаксис, чтобы заставить его работать. Я был бы признателен за любые конструктивные комментарии или подсказки, чтобы заставить двухуровневый запрос Linq работать.
Спасибо
<mainxml> <section lvl="0"> <subsec ssn="a"> <item>with</item> <item>a little</item> <item>help</item> </subsec> <subsec ssn="b"> <item>from</item> <item>my</item> <item>friends</item> </subsec> </section> <section lvl="1"> <subsec ssn="y"> <item>Ive</item> <item>got</item> <item>the</item> </subsec> <subsec ssn="z"> <item>music</item> <item>in</item> <item>me</item> </subsec> </section> </mainxml>
Что я уже пробовал:
//=============================================================== public class LineItem() //---------------------------------- { public int WdCtr {get; set;} public string Word {get; set;} } // eo class LineItem ------------------------------------- public class LineList() // --------------------------------- { public List<lineitem> Includes {get; set;} } // eo class lineList ------------------------------------- void firstQuery() // ------------------------------------------ { int ctr = -1; var mainList = (from sect in XLineDoc.Descendents("section") where sect.Attirbute("lvl").Value=="1" && sect.Element("subSec").Attribute("ssn").Value ="z" select new LineList { Includes=(from wd in sect.Elements("subSec").Element("item") select new LineItem { WdCtr=ctr++, Word = wd.Value }).ToList() }).ToList(); } // eo firstQuery ----------------------------------------------</lineitem>