Linq заказ не заказывая - PullRequest
       4

Linq заказ не заказывая

2 голосов
/ 23 декабря 2011

У меня есть запрос:

var q = 
    (
        from c in db.tblArcadeGamePlays 
        join a in db.tblProfiles on c.UserID equals a.UserID
        where c.UserID != 0
        orderby c.Date descending
        select new { c.UserID, c.tblForumAuthor.Username, a.EmailAddress }
    )
    .Distinct()
    .Take(12);   

Это берет правильные записи, но не упорядочивает их. Если я переключу заказ на asc / desc, это не повлияет! Кто-нибудь может указать, что я могу сделать, чтобы сначала вернуть записи, самые новые?

Редактировать

Он возвращает правильный порядок результатов, если Distinct() удален, но теперь он возвращает одну и ту же запись пользователя снова и снова (я хочу, чтобы каждый пользователь появлялся только один раз)

Ответы [ 4 ]

2 голосов
/ 23 декабря 2011

Звучит так, как будто вы хотите, чтобы список distinct был упорядочен по последнему элементу в каждом наборе, верно?

Чтобы сделать это, вы должны использовать group by.Вам придется order дважды, один раз в каждом наборе и еще раз для всего списка:

var q = 
    from s in 
    (
        from c in db.tblArcadeGamePlays 
        join a in db.tblProfiles on c.UserID equals a.UserID
        where c.UserID != 0
        select new { c.UserId, c.TblForumAuthor.Username, a.EmailAddress, c.Date }
    )
    group s by new { g.UserId, g.Username, g.EmailAddress } into g
    orderby g.OrderByDescending(s => s.Date).First().Date descending
    select g.Key
    )
    .Take(12);  

Часть orderby может показаться запутанной, но это просто: упорядочитьгрупп по первой дате в каждой группе

2 голосов
/ 23 декабря 2011

Distinct отменяет ваш OrderBy. Сделай свою сортировку по разному и у тебя все будет хорошо.

2 голосов
/ 23 декабря 2011

Исправлено, это рабочий запрос:

var q = (from c in db.tblArcadeGamePlays
            join a in db.tblProfiles on c.UserID equals a.UserID
            where c.UserID != 0
            select new {
                c.UserID,
                c.tblForumAuthor.Username,
                a.EmailAddress,
                Date = (from d in db.tblArcadeGamePlays where d.UserID == c.UserID orderby d.Date descending select new { d.Date}).Take(1).Single().Date
            })
.Distinct()
.OrderByDescending(c=>c.Date)
.Take(12);  

Вам нужно указать дату в выборке, чтобы я взял последнюю дату для этого конкретного пользователя и заказал после Distinct(). Трудно объяснить, но имеет больше смысла, если вы прочитаете его.

0 голосов
/ 23 декабря 2011

Как насчет этого?

var q = (from c in db.tblArcadeGamePlays  
join a in db.tblProfiles on c.UserID equals a.UserID 
where c.UserID != 0 
select new { c.UserID, c.tblForumAuthor.Username, a.EmailAddress })
.OrderByDescending(c => c.Date) 
.Distinct() 
.Take(12);  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...