【问题标题】:SQL statement with multiple syntax to EF Core具有多种语法的 SQL 语句到 EF Core
【发布时间】:2019-11-12 22:34:07
【问题描述】:

我正在尝试复制此 SQL 语句

  SELECT TOP(5) Activity, COUNT(*)     
  FROM [Table]
  GROUP BY Activity
  ORDER BY count(Activity) DESC

到我的 MVC .NET Core 应用程序中的 EF Core。

到目前为止,我可以使用以下代码显示我需要的所有数据,而无需使用语法(组、顺序、顶部):

var activity = list.Select(f => f.Activity.Name).Distinct();

我尝试过使用Take(),但这只是给了我表格中最上面的几行,我似乎无法让OrderByDescending() 工作。

【问题讨论】:

    标签: entity-framework-core asp.net-core-mvc


    【解决方案1】:

    首先您需要执行OrderByDescending(),然后您可以使用take(),它会在执行order by后为您提供最高记录。

    var activity = dataList.Select(f =>f.Activity).Distinct().OrderByDescending(p=>p).Take(5);
    

    【讨论】:

    • groupby 语法怎么样?我得到的结果似乎是按名称排序而不是计数。
    • 如您所见,Distinct(),它将只返回唯一记录。
    【解决方案2】:

    根据您的 SQL 查询,您需要像这样执行。

    示例类

        public class Activity
        {
            public string Name { get; set; }
        }
    

    控制器方法

    使用示例数据,您需要进行相应更改

            public ActionResult Index()
            {           
    
                List<Activity> lstActivity = new List<Activity>();
                lstActivity.Add(new Activity() { Name = "A" });
                lstActivity.Add(new Activity() { Name = "B" });
                lstActivity.Add(new Activity() { Name = "A" });
                lstActivity.Add(new Activity() { Name = "A" });
                lstActivity.Add(new Activity() { Name = "C" });
                lstActivity.Add(new Activity() { Name = "A" });
                lstActivity.Add(new Activity() { Name = "D" });
                lstActivity.Add(new Activity() { Name = "A" });
                lstActivity.Add(new Activity() { Name = "E" });
                lstActivity.Add(new Activity() { Name = "A" });
                lstActivity.Add(new Activity() { Name = "F" });
                lstActivity.Add(new Activity() { Name = "1" });
                lstActivity.Add(new Activity() { Name = "G" });
                lstActivity.Add(new Activity() { Name = "G" });
                lstActivity.Add(new Activity() { Name = "1" });
    
                var activity = lstActivity.GroupBy(x => x.Name).Select(x => new { Name = x.Key, Count = x.Count() }).OrderByDescending(x=>x.Count).Take(5).ToList();
                return View(activity);
            }
    

    输出

    【讨论】:

    • 谢谢吉山!这很完美。感谢您提供所有详细信息!
    • 欢迎兄弟:)
    猜你喜欢
    • 2019-08-04
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多