linq сортировка много 2 много вопрос - PullRequest
1 голос
/ 30 марта 2010

Моя основная сущность называется [Контракт]. Контракт имеет множество отношений с [Сервисом].

Когда я запрашиваю список контрактов, я беру 1-ю услугу, доступную вот так:

IQueryable<Contract> q = ctx.Contracts.Skip(startRow - 1).Take(pgSize);
q.Select(c =>
         new ContractSearchResult()
         {
           ContractID = c.ContractID,
           FirstService = c.Contract2Service.FirstOrDefault().Service.Name,
           ServiceCount = c.Contract2Service.Count,
         }
        ).ToList();

(Когда я отображаю этот список, я показываю FirstService, если есть только 1. Если> 1, я показываю «My1stService (3)», чтобы показать, что я вижу 1-й из 3 сервисов) Это работает нормально.

Мой вопрос такой:

Есть ли способ сортировки по FirstService? Или это невозможно? Я не нашел способа выразить это в linq и разрешить подкачку.

Любая помощь будет оценена.

Ответы [ 2 ]

2 голосов
/ 30 марта 2010

Вы должны заказать, прежде чем страница.

var result = ctx.Contracts
    .Select(c =>
        new ContractSearchResult()
        {
            ContractID = c.ContractID,
            FirstService = c.Contract2Service.FirstOrDefault().Service.Name,
            ServiceCount = c.Contract2Service.Count,
        })
 .OrderBy(x => x.FirstService)
 .Skip(startRow - 1)
 .Take(pgSize)
 .ToList();

Также обратите внимание, что FirstOrDefault может вернуть null, и вы должны проверить это. Если вы знаете, что оно никогда не будет (или должно быть) null, используйте вместо него First.

1 голос
/ 30 марта 2010
q.OrderBy(c => c.Contract2Service.FirstOrDefault().Service.Name)
 .Select(c =>
        new ContractSearchResult()
        {
            ContractID = c.ContractID,
            FirstService = c.Contract2Service.FirstOrDefault().Service.Name,
            ServiceCount = c.Contract2Service.Count,
        }
    )
 .ToList();

Если я не пропустил что-то в вашем вопросе (что возможно), это должно быть так же просто, как позвонить OrderBy() после вашего звонка на Select()

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