c# - 使用不同名称的 LINQ to Entities 表前 100

标签 c# mysql asp.net entity-framework linq

我在查找有关使用 lambda 表达式的最新答案时遇到了问题,并订购了一个包含来自实体的表数据的列表,该列表按“喜欢”排序,没有重复的“机构”,并且只显示前 100 个。

我有以下内容,但我猜它对 distinct 不起作用。每次我运行它并检查它时,它仍然会出现重复的机构名称。我不知道为什么它不处理重复的机构名称。

        public PartialViewResult Top100()
    {
        List<New_NYC_Usage_Table> data = db.New_NYC_Usage_Table.ToList();

        data = db.New_NYC_Usage_Table.Where(x => x.Platform != "TOTAL").ToList();
        data = data.OrderByDescending(x => x.Agency).Distinct().ToList();
        data = data.OrderByDescending(x => x.Likes_Follows_Etc).Take(100).ToList();
        return PartialView("_Data", data);

    }

如果我不清楚或这篇文章不相关或重复主题,请指出正确的方向或 MSDN 链接或带有有用示例的引用,谢谢。

最佳答案

我认为您正在尝试获取按喜欢、关注等排序的前 100 家机构的列表,但如果某个机构两次出现在该列表中,我假设您只想要排名最高的展示,而不是两者。

我认为这个 linq 查询应该做你想做的(尽管我只能在类似的表上测试它所以一定要仔细检查)

var data = db.New_NYC_Usage_Table.Where(x => x.Platform != "TOTAL")
.GroupBy(x => x.Agency, (key, g) => g.OrderByDescending(x => x.Likes_Follows_Etc).First()).OrderByDescending(x => x.Likes_Follows_Etc).Take(100).ToList(); 

这是正在发生的事情。我正在获取平台不是“TOTAL”的所有记录,然后按机构对它们进行分组。然后在每个组中我得到最高的赞,这样我在每个组中只有一个代理机构。然后我按喜欢对这些记录进行排序,最后进入前 100 名。

我注意到在您的代码中您总是在每次查询后调用 .toList,这通常不是必需的并且通常会损害性能。您应该只在最后可能的时刻调用列表。你的 linq 表达式实际上不是数据的集合,而是你想要的指令,你可以继续添加到这个指令(就像你在你的代码中做的那样,但没有“.toList”)并且它实际上不会去并且获取数据,只有当您真正尝试查看数据时,它才会最终为您获取数据,从而使其非常高效。每次调用 .toList 时,您都在要求对数据进行评估,但此时您不关心那里有什么,您只关心返回结果中的内容。

关于c# - 使用不同名称的 LINQ to Entities 表前 100,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37087532/

相关文章:

c# - 是否有明确的来源列出了 .NET Framework 版本中的所有新内容?

c# - WPF中上标的上标

php - 我的选择表单不显示数据库项目

c# - map 服务器: anyplatfom (opensource or not) to embed into website to query with SQL for further breakdown

.net - ASP.NET:跨应用程序的表单例份验证:匹配密码加密设置

c# - 更新面板内的 Page.Unload 事件

c# - 使用WebClient时如何绕过系统代理

c# - 在 Mono 2.10 中使用表值参数 (SqlDbType.Structured)

MySQL - 从时间距离为5分钟的2个表中获取行,并将它们放入新表中

MySQL按小时获取记录数,即使是没有记录的小时