【问题标题】:How can I get this result using linq?如何使用 linq 获得此结果?
【发布时间】:2013-11-25 22:55:32
【问题描述】:

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

举个简单的例子,假设我的用户表有以下字段:

UserId, Name, Age, Gender

我的投票表有:

UserId, DateCreated

我要做的是选出票数最高的前 10 名用户。

我该怎么做?

谢谢

【问题讨论】:

  • 到目前为止,您的查询是什么样的? “最高票数”究竟是什么意思?
  • 这是问题所在:我没有设法通过搜索找到任何东西,因为我对问题的描述太冗长了。我不知道该转向哪里!哎呀,如果有人能指出我应该寻找的大致方向,那将非常有帮助
  • 也许我很困惑,但您似乎没有在任何地方存储选票数量。您的表格与您的问题无关。
  • 所以你的投票表只有一个字段UserId?
  • 抱歉,这些字段不正确 - 现在应该更有意义了

标签: c# linq


【解决方案1】:
Context.Users.OrderByDescending(x => x.Votes.Count()).Take(10)

【讨论】:

  • 我觉得应该是OrderByDescending
【解决方案2】:

假设您已经在表格之间设置了导航属性,您可以这样做:

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-06
      • 1970-01-01
      • 2017-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多