Как преобразовать этот запрос linqTOsql в лямбду - PullRequest
2 голосов
/ 26 января 2011

Для меня это больше дразнилка, так как запрос linqTOsql удовлетворяет потребности.Мне просто любопытно, как такой запрос можно преобразовать в лямбду или, если это вообще возможно.

Первоначально я пытался сделать это с помощью лямбды, но единственный способ, которым я мог выяснить, как выполнитьприсоединения, чтобы я мог правильно упорядочить результаты, должен был использовать синтаксис запроса:

        var entries = from e2c in entry2CatsTable
                      join sEntries in streamEntryTable
                      on e2c.streamEntryID equals sEntries.seID
                      orderby sEntries.seDateCreated descending
                      orderby e2c.e2cOrder
                      where e2c.catID == catID
                      select sEntries;

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

        IQueryable<Entry2Cats> e2c = entry2CatsTable
                                        .Where(x => x.catID == catID)
                                        .OrderBy(x => x.e2cOrder);
        IQueryable<StreamEntry> entries = e2c.SelectMany(x => x.StreamEntry);

Эти лямбдывернуть правильные результаты, но я не мог упорядочить их правильно, потому что мне нужно было упорядочить по полям в таблице Entry2Cats и таблице StreamEntry.Поскольку это было многим для многих утверждение, подобное этому, не работает:

// doesn't work because it doesn't know which x.Entry2Cats.e2cOrder to use
entries.OrderByDescending(x => x.seDateCreated).OrderBy(x => x.Entry2Cats.e2cOrder);

Есть мысли?

Примечание:

Кроме того, результаты должны быть возвращены какIQueryable потому что контроллер добавляет функцию разбивки на страницы.

1 Ответ

2 голосов
/ 26 января 2011
var entries = entry2CatsTable
                .Join(streamEntryTable, e2c => e2c.streamEntryID, sEntries => sEntries.seID, (e2c, sEntries) => new { e2c, sEntries })
                .Where(item => item.e2c.catID == catID)
                .OrderByDescending(item => item.sEntries.seDateCreated)
                .ThenBy(item => item.e2c.e2cOrder)
                .Select(item => item.sEntries);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...