Как создать несколько элементов в перечислителе Linq to XML? - PullRequest
1 голос
/ 14 сентября 2009

У меня довольно простой запрос Linq to XML:

var q = from c in xd.Descendants("PrimaryCategory")
        where (int)xd.Element("PrimaryCategoryID") == 3
        select new {campaignName = c.Element("CategoryList").Element("CategoryName").Value,
        campaignURL = c.Element("CategoryList").Element("CategoryURL").Value};

Это нормально для извлечения имени категории и categoryURL из первого элемента CategoryList PrimaryCategoryID 3. Единственная проблема состоит в том, что в PrimaryCategory есть несколько узлов CategoryList, и мне нужно, чтобы он возвращал перечисляемый список объектов со всеми Имена и URL в.

Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 15 сентября 2009

Хотя я пометил другой ответ как «ответ», я на самом деле решил эту проблему другим способом. Несмотря на это, я ничего не получу за то, что принял свой собственный ответ, а JS совершенно оправдан и был полезен. Таким образом, как единственный ответчик, кроме меня, слава идет к нему. Для справки мое собственное решение включено сюда.

То, на чем я остановился, было:

var xmlcampaigns = from c in xd.Descendants("PrimaryCategory")
                   where (int)c.Element("PrimaryCategoryID") == 3
                   select new {campaignName = c.Elements("CategoryList").Elements("CategoryName").ToList(),
                   campaignURL = c.Elements("CategoryList").Elements("CategoryURL").ToList()};

Затем я извлек результаты в два объекта List и перебрал их.

0 голосов
/ 14 сентября 2009

Если вы ожидаете, что будет только один элемент PrimaryCategory с соответствующим идентификатором категории, я бы сделал:

var category = xd.Descendants("PrimaryCategory")
                 .Where(c => (int)c.Element("PrimaryCategoryID") == 3)
                 .Single(); // Could use `FirstOrDefault` if there could be none

var query = from list in category.Elements("CategoryList")
            select new { Name = list.Element("CategoryName").Value,
                         Url = list.Element("CategoryURL").Value };

Вы можете сделать все это в одном запросе, но я думаю, что это будет более запутанным, чем разделение двух битов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...