【问题标题】:How to use ORDER BY COUNT in LINQ and SELECT COUNT it?如何在 LINQ 中使用 ORDER BY COUNT 和 SELECT COUNT 呢?
【发布时间】:2021-01-06 02:50:15
【问题描述】:

我有一个查询,但我不知道将其更改为 LINQ

select distinct m.id,m.name, sch.id as schedule, COUNT(tk.id) as tiketSold
from movies m, schedules sch, tickets tk
where m.id = sch.movie_id and sch.id = tk.schedule_id
group by m.id,m.name, sch.id
order by COUNT(tk.id) desc

我正在尝试:

var hotMovie = from m in _db.movies
                           from sch in _db.schedules
                           from tk in _db.tickets
                           where m.id == sch.movie_id && sch.id == tk.schedule_id
                           group m by m.id into g
                           orderby g.Count()
                           select new { Movie = g};

【问题讨论】:

标签: c# sql-server asp.net-mvc linq


【解决方案1】:

我没有你的数据库,所以我已经创建了 3 个类,就像我可以预料的那样。然后我在“TestMethod”表中创建了 3 个列表。在 linq 查询中,我加入了 3 个列表,如您在 sql 查询段“其中 m.id = sch.movi​​e_id 和 sch.id = tk.schedule_id”中所示,然后我执行分组,按选择排序。这是我的代码,请尝试一下,让我知道它是否有效。

 public class movies
{
    public int id { get; set; }
    public string name { get; set; }
 
}

public class schedules
{
    public int id { get; set; }
    public int movie_id { get; set; }
}

public class tickets
{
    public int id { get; set; }
    public int schedule_id { get; set; }
}
 void TestMethod()
 {
        //Add Movies to the list
        List<movies> moviesItems = new List<movies>();
        moviesItems.Add(new movies() { id = 1, name = "A" });
        moviesItems.Add(new movies() { id = 2, name = "B" });

        //Add Schedules to the list
        List<schedules> schedulesItems = new List<schedules>();
        schedulesItems.Add(new schedules() { id = 1, movie_id = 1 });
        schedulesItems.Add(new schedules() { id = 2, movie_id = 2 });
        schedulesItems.Add(new schedules() { id = 3, movie_id = 1 });
        schedulesItems.Add(new schedules() { id = 4, movie_id = 2 });

        //Add Tickets to the list
        List<tickets> ticketsItems = new List<tickets>();
        ticketsItems.Add(new tickets() { id = 1, schedule_id = 1 });
        ticketsItems.Add(new tickets() { id = 2, schedule_id = 1 });
        ticketsItems.Add(new tickets() { id = 3, schedule_id = 2 });
        ticketsItems.Add(new tickets() { id = 4, schedule_id = 2 });
        ticketsItems.Add(new tickets() { id = 5, schedule_id = 2 });
        ticketsItems.Add(new tickets() { id = 6, schedule_id = 3 });
        ticketsItems.Add(new tickets() { id = 7, schedule_id = 3 });
        ticketsItems.Add(new tickets() { id = 8, schedule_id = 3 });
        ticketsItems.Add(new tickets() { id = 9, schedule_id = 3 });
        ticketsItems.Add(new tickets() { id = 10, schedule_id = 4 });

        var query = from final in (from m in moviesItems
                                   join sch in schedulesItems on m.id equals sch.movie_id
                                   join tk in ticketsItems on sch.id equals tk.schedule_id
                                   select new { movieID = m.id, movieName = m.name, schID = sch.id, tkID = tk.id })
                    group final by new { final.movieID, final.movieName, final.schID } into g
                    orderby g.Count() descending
                    select new { g.Key.movieID, g.Key.movieName, g.Key.schID, tiketSold = g.Count() };
}

【讨论】:

    【解决方案2】:

    此查询最接近您的 SQL,但您可能需要 LEFT JOIN。如果您提供模型,也可以使用导航属性进行简化。

    var hotMovie = 
       from m in _db.movies
       join sch in _db.schedules on m.id equals sch.movie_id
       join tk in _db.tickets on sch.id equals tk.schedule_id
       group tk by new { movieID = m.id, movieName = m.name, scheduleId = sch.id } into g
       orderby g.Sum(x => x.id != null ? 1 : 0) descending
       select new 
       { 
          g.Key.movieID, 
          g.Key.movieName, 
          g.Key.scheduleId, 
          tiketSold = g.Sum(x => x.id != null ? 1 : 0) 
       };
    

    【讨论】:

      猜你喜欢
      • 2011-04-18
      • 2013-10-06
      • 1970-01-01
      • 2014-10-21
      • 1970-01-01
      • 2019-01-27
      • 1970-01-01
      • 1970-01-01
      • 2023-02-01
      相关资源
      最近更新 更多