2009-10-28 10 views
2

J'ai besoin d'aide pour transformer cette expression linq en une instruction linq. SampleData.Publishers et SampleData.Books sont des collections simples que j'ai du livre Linq in Action.Besoin d'aide pour transformer cette expression LINQ en instruction LINQ

Voici l'expression

var pubBooks = 
      from pub in SampleData.Publishers 
      join book in SampleData.Books on pub.Name equals book.Publisher.Name into pubbks 
      select new { 
       Publisher = pub.Name, 
       Books = 
        from b in pubbks 
        select b.Title 
      }; 

Voici ce que j'ai jusqu'à présent, mais je ne peux pas sembler obtenir la collection de livres définis dans le type anonyme. Merci pour votre temps.

var pubBooks = SampleData.Publishers.Join(SampleData.Books, pub => pub.Name, book => book.Publisher.Name, (pub, book) => new { 
      Publisher=pub.Name, 
      Books=?????? 
     }); 

Répondre

0

Resharper m'a donné ceci:

var pubBooks = 
      SampleData.Publishers.GroupJoin(
       SampleData.Books, 
       pub => pub.Name, 
       book => book.Publisher.Name, 
       (pub, pubbks) => new 
            { 
             Publisher = pub.Name, 
             Books = 
            from b in pubbks 
            select b.Title 
            }); 
+0

Je ne prends aucun crédit pour cette :-) Quelqu'un devrait écrire un ligne LINQ-expression au widget de conversion d'instruction ... – rohancragg

+0

ps Je ne l'ai pas testé, évidemment. – rohancragg

3

vraiment moyen facile de le faire est d'utiliser Reflector. Lorsque vous analysez votre code, vous verrez une déclaration, pas une expression.

3

Une autre bonne façon de transformer cela est d'utiliser LinqPad.

2

Vous pouvez utiliser GroupJoin.

Je n'ai pas testé cela, mais il pourrait ressembler à ceci:

var pubBooks = SampleData.Publishers.GroupJoin(SampleData.Books, pub => pub.Name, book => book.Publisher.Name, (pub, bookColl) => new { 
      Publisher = pub.Name, 
      Books = bookColl.Select(b => b.Title) 
     }); 
Questions connexes