如何使用linq获得此结果?

时间:2013-11-25 14:40:14

标签: c# linq

我目前有两个表: Users 表和 Votes 表。投票表存储包含用户ID的记录。

举个简单的例子,假设我的Users表包含以下字段:

UserId, Name, Age, Gender

我的投票表有:

UserId, DateCreated

我想要做的是选择投票率最高的前10位用户。

我该怎么做?

由于

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:2)

假设您在表之间设置了导航属性,则可以执行以下操作:

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

这将找到票数最多的前10位用户。

答案 2 :(得分: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);