Союз порядок в Linq для лиц - PullRequest
5 голосов
/ 03 мая 2011

У меня проблема с выбором модели EDM Union.У меня есть записи в БД с уникальными идентификаторами.Например, список идентификаторов: 1, 2, 3, 4, 5, 6, 7, 8, 9

Мне нужно выбрать, например, записи № 6 и 2 записи перед № 6 и 2 записи после #6.В выбранном результате это должно быть 4,5,6,7,8

Я сделал это следующим образом:

public IQueryable<photos> GetNextPrev(Int64 photoid, string userlogin)
    {
        var p1 = (from m in db.photos
                 where m.id < photoid && m.userlogin == userlogin
                 orderby m.id descending
                 select m).Take(2).Skip(0);
        var p2 = (from m in db.photos
                  where m.id >= photoid && m.userlogin == userlogin
                  orderby m.id descending
                  select m).Take(3).Skip(0);
        return (p1.Union(p2));
    }

Но порядок не такой, как в примере ...

Спасибо за помощь!

Ответы [ 2 ]

3 голосов
/ 03 мая 2011

Это из-за последнего Союза, вы не можете гарантировать порядок с ним.Вы хотите сделать это по возвращении:

return (p1.Union(p2).OrderByDescending(m => m.id));

Обновление

С дальнейшим пониманием проблем, я думаю, это позаботится об этом:

public IQueryable<photos> GetNextPrev(Int64 photoid, string userlogin)
{
    var p1 = (from m in db.photos
             where m.id < photoid && m.userlogin == userlogin
             orderby m.id descending
             select m).Take(2).Skip(0);
    var p2 = (from m in db.photos
              where m.id >= photoid && m.userlogin == userlogin
              orderby m.id 
              select m).Take(3).Skip(0);
    return (p1.Union(p2).OrderBy(m => m.id));
}
3 голосов
/ 03 мая 2011

Вы не можете брать на себя любые заказы.Вам всегда нужен OrderBy, если вы хотите, чтобы вещи были заказаны.

return p1.Union(p2).OrderBy(p=> p.id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...