C# 获取实体框架中重复次数最多的五条记录

C# 获取实体框架中重复次数最多的五条记录,c#,entity-framework,C#,Entity Framework,我想从EntityFramework4.0链接中的表中获取前五个重复次数最多的记录。如何在一个返回五条记录的集合列表的查询中实现这一点?您只需按计数分组,按计数降序,然后取(5)。分组示例可以在中找到。您只需按计数分组,按计数降序,然后取(5)。分组示例可以在中找到。实际上,您应该按照定义记录是否重复的字段进行分组。例如,在您的情况下,它应该类似于成员id。然后您可以引入新的范围变量,该变量将保留每个组中的记录数。将该变量用于排序结果: var query = from s in db.Stat

我想从EntityFramework4.0链接中的表中获取前五个重复次数最多的记录。如何在一个返回五条记录的集合列表的查询中实现这一点?

您只需按计数分组,按计数降序,然后取(5)。分组示例可以在中找到。

您只需按计数分组,按计数降序,然后取(5)。分组示例可以在中找到。

实际上,您应该按照定义记录是否重复的字段进行分组。例如,在您的情况下,它应该类似于成员id。然后您可以引入新的范围变量,该变量将保留每个组中的记录数。将该变量用于排序结果:

var query = from s in db.Statistics
            group s by s.MemberId into g  // group by member Id
            let loginsCount = g.Count()  // get count of entries for each member
            orderby loginsCount descending // order by entries count
            select new { // create new anonymous object with all data you need
                MemberId = g.Key,
                LoginsCount = loginsCount
            };
然后采取前5个步骤:

 var top5 = query.Take(5);
这将生成如下查询

SELECT TOP (5)                               // Take(5)
[GroupBy1].[K1] AS [MemberId],               // new { MemberId, LoginsCount }
[GroupBy1].[A1] AS [C1]
FROM ( SELECT
        [Extent1].[MemberId] AS [K1],
        COUNT(1) AS [A1]                     // let loginsCount = g.Count()
        FROM [dbo].[Statistics] AS [Extent1]
        GROUP BY [Extent1].[MemberId]        // group s by s.MemberId
)  AS [GroupBy1]
ORDER BY [GroupBy1].[A1] DESC                // orderby loginsCount descending

实际上,您应该按定义记录是否重复的字段分组。例如,在您的情况下,它应该类似于成员id。然后您可以引入新的范围变量,该变量将保留每个组中的记录数。将该变量用于排序结果:

var query = from s in db.Statistics
            group s by s.MemberId into g  // group by member Id
            let loginsCount = g.Count()  // get count of entries for each member
            orderby loginsCount descending // order by entries count
            select new { // create new anonymous object with all data you need
                MemberId = g.Key,
                LoginsCount = loginsCount
            };
然后采取前5个步骤:

 var top5 = query.Take(5);
这将生成如下查询

SELECT TOP (5)                               // Take(5)
[GroupBy1].[K1] AS [MemberId],               // new { MemberId, LoginsCount }
[GroupBy1].[A1] AS [C1]
FROM ( SELECT
        [Extent1].[MemberId] AS [K1],
        COUNT(1) AS [A1]                     // let loginsCount = g.Count()
        FROM [dbo].[Statistics] AS [Extent1]
        GROUP BY [Extent1].[MemberId]        // group s by s.MemberId
)  AS [GroupBy1]
ORDER BY [GroupBy1].[A1] DESC                // orderby loginsCount descending

我不明白,你能告诉我确切的查询吗?我不明白,你能告诉我确切的查询吗?你正在处理哪些确切的记录?你如何定义它们是重复的?请出示你的密码。没有确切的信息,你就无法得到确切的答案。@SergeyBerezovskiy让我解释一下。。假设我有一个统计表,每当成员登录到他的帐户时,我都会在其中保存一条记录,现在我想获得登录次数最多的前五名成员的登录次数。。你需要更多的解释吗?这就足够得到更准确的答案了。但请记住——下次您应该直接用有问题的代码示例提供所有这些信息。这将使答案快速准确。您使用的确切记录是什么?你如何定义它们是重复的?请出示你的密码。没有确切的信息,你就无法得到确切的答案。@SergeyBerezovskiy让我解释一下。。假设我有一个统计表,每当成员登录到他的帐户时,我都会在其中保存一条记录,现在我想获得登录次数最多的前五名成员的登录次数。。你需要更多的解释吗?这就足够得到更准确的答案了。但请记住——下次您应该直接用有问题的代码示例提供所有这些信息。这将使答案快速准确。这似乎很有帮助,非常感谢。链接到实体的确切查询是什么?@user2493843我已经用生成的SQL查询示例更新了答案:)这似乎很有帮助,非常感谢。链接到实体的确切查询是什么?@user2493843我已经用生成的SQL查询示例更新了答案:)