获取实体框架中的总行数

Ste*_*bbi 18 c# sql-server entity-framework

我正在使用Entity Framework来获取表的总行数.我只想要行计数,没有where子句或类似的东西.以下查询有效,但速度很慢.返回计数4475大约需要7秒钟.

我的猜测是它正在迭代整个表,就像IEnumerable.Count()扩展方法的工作方式一样.

有没有办法可以"快速"获得总行数?有没有更好的办法?

    public int GetLogCount()
    {
        using (var context = new my_db_entities(connection_string))
        {
            return context.Logs.Count();
        }
    }
Run Code Online (Sandbox Code Playgroud)

Bhu*_*ake 7

您甚至可以使用实体框架触发Raw SQL查询,如下所示:

var sql = "SELECT COUNT(*) FROM dbo.Logs";
var total = context.Database.SqlQuery<int>(sql).Single();
Run Code Online (Sandbox Code Playgroud)


Yaa*_*lis 6

这是使用Entity Framework获取行数的方法.您可能会在第二次+查询上看到更快的性能,因为第一次运行时会出现初始化成本.(它应该在Select Count()这里生成一个查询,而不是遍历每一行).

如果您对以更快的方式获取表中的原始行计数感兴趣,那么您可能想尝试使用像DapperOrmLite这样的迷你ORM .

您还应该确保您的表已正确定义(至少,它具有主键),因为如果不这样做也会影响计算表中行的时间.