C# 如何使用linq获得此结果?

C# 如何使用linq获得此结果?,c#,linq,C#,Linq,我目前有两个表:一个用户表和一个投票表。投票表存储包含用户Id的记录 作为一个简单的示例,假设my Users表具有以下字段: UserId, Name, Age, Gender 我的投票表有: UserId, DateCreated 我想做的是选择投票率最高的前10名用户。 我该怎么做 谢谢假设您已经在表之间设置了导航属性,您可以执行以下操作: var results = db.Users.OrderByDescending(u => u.Votes.Count()).Take(10

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

作为一个简单的示例,假设my Users表具有以下字段:

UserId, Name, Age, Gender
我的投票表有:

UserId, DateCreated
我想做的是选择投票率最高的前10名用户。

我该怎么做


谢谢

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

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

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

如果没有外键/属性映射:

  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);

到目前为止,您的查询是什么样子的?“最高票数”到底意味着什么?这就是问题所在:我没有通过搜索找到任何东西,因为我对问题的描述太冗长了。我不知道该去哪里!见鬼,如果有人能给我指出我应该搜索的大致方向,那会很有帮助。也许我很困惑,但你似乎并没有在任何地方存储投票数。您的表格对于您的问题毫无意义。因此您的投票表格只有一个字段
UserId
?抱歉,这些字段不正确-现在应该更清楚了我认为应该是
OrderByDescending
  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);