2013-11-25 4 views
0

В настоящее время у меня есть две таблицы: таблица Пользователи и таблица Голоса. В таблице «Голоса» хранится запись, содержащая идентификатор пользователя.Как получить этот результат с помощью linq?

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

UserId, Name, Age, Gender 

И мой стол Голоса есть:

UserId, DateCreated 

То, что я хочу сделать, это выбрать топ-10 пользователи, которые имеют самые высокие голоса.

Как это сделать?

Благодаря

+4

Что делает ваш запрос выглядеть так далеко? И что означает «самые высокие голоса»? –

+0

В этом проблема: мне не удалось найти что-либо через поиск, потому что мое описание проблемы настолько многословно. Я не знаю, куда обратиться! Черт, если кто-то может даже указать мне в грубом направлении того, что я должен искать, это было бы очень полезно. – alimac83

+0

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

ответ

6
Context.Users.OrderByDescending(x => x.Votes.Count()).Take(10) 
+0

Восстанавливает пользователей с помощью _least_ голосов. – AxelEckenberger

+2

Я думаю, что это должно быть 'OrderByDescending' – sloth

+0

Этот запрос вернет 10 пользователей с наименьшим количеством голосов. – Somedust

2

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

var results = db.Users.OrderByDescending(u => u.Votes.Count()).Take(10); 

Найдет топ 10 пользователей с наибольшим количеством голосов ,

+0

Почему downvote? –

2

Если вам не внешние ключи/свойство отображается:

var query = (from u in db.Users 
       join v in (
       from v in db.Votes 
       group v by v.UserId into grp 
       select new { 
       UserId = grp.Key, 
       Count = grp.Count() 
       }) on u.Id equals v.UserId into l_vset 
       from l_v in l_vset.DefaultIfEmpty() 
       orderby l_v == null ? 0 : l_v.Count descending 
       select new { 
       User = u, 
       Votes = l_v == null ? 0 : l_v.Count 
       }).Take(10); 
Смежные вопросы