Нужна помощь в превращении этого выражения LINQ в оператор LINQ

2

Мне нужна помощь в преобразовании этого выражения linq в элемент linq. SampleData.Publishers и SampleData.Books - это простые коллекции, которые я имею в книге Linq в Action.

Вот выражение

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
            };

Вот что я до сих пор, но, похоже, я не могу получить коллекцию книг, определенную в анонимном типе. Спасибо за ваше время.

var pubBooks = SampleData.Publishers.Join(SampleData.Books, pub => pub.Name, book => book.Publisher.Name, (pub, book) => new {
            Publisher=pub.Name,
            Books=??????
        });
Теги:
linq

4 ответа

0
Лучший ответ

Resharper дал мне следующее:

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
    Я не возражаю против этого :-) Кто-то должен написать онлайн LINQ-выражение для виджета преобразования оператора ...
  • 0
    PS Я не проверял это, очевидно.
3

Другим хорошим способом преобразования этого является использование LinqPad.

3

Действительно простой способ сделать это - использовать Reflector. Когда вы анализируете свой код, вы увидите оператор, а не выражение.

2

Вы можете использовать GroupJoin.

Я не тестировал это, но это могло бы выглядеть так:

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)
        });

Ещё вопросы

Сообщество Overcoder
Наверх
Меню