2010-10-08 2 views
1

Согласно сообщению Select element with given attribute using linq to xml, что будет эквивалентным выражением лямбда.эквивалентное выражение лямбда для этого запроса выражение

Ниже решение отлично работает

var artistsAndImage = from a in feed.Descendants("artist") 
         from img in a.Elements("image") 
         where img.Attribute("size").Value == "big" 
         select new { Name = a.Element("Name").Value 
           , Image = img.Value}; 

Я попытался лямбда-выражение, но это не работает :-( кто-нибудь может предложить эквивалентное выражение лямбда

ответ

2

Sure:.

var artistsAndImage = feed.Descendants("artist") 
          .SelectMany(a => a.Elements("image"), 
             (a, img) => new { a, img }) 
          .Where(z => z.img.Attribute("size").Value == "big") 
          .Select(z => new { Name = z.a.Element("Name").Value, 
              Image = z.img.Value }); 

(Непроверенный, но я думаю, что он должен работать.)

Трудный бит здесь заключается в том, что вторая статья from вызывает SelectMany и вводит прозрачный идентификатор , который я сделал несколько менее прозрачным, позвонив по номеру z.

Любая конкретная причина, по которой вы хотите избежать синтаксиса выражения запроса? В этом примере это проще: я просто использую то, что проще для запроса, который я пишу.

+0

его рабочий, просто большой должен быть под "". :-), не очень хорошо с выражением запроса, а просто пытаюсь использовать лямбда для обучения цели. И я думаю, что мне нужно пройти через SelectMany :-) – Wondering

+0

@Wondering: Что вы подразумеваете под * под "" *? И да, эквивалентная лямбда-нотация, безусловно, будет использовать 'SelectMany', так как это переводит второй' from'. –

+0

. Где (z => z.img.Attribute («размер»). Значение == «большой») – Wondering