c# - 如何优化 linq 中将 ~4000 行转换到对象的 "select all"语句?

标签 c# sql linq

我有一个执行一些 linq 操作的方法,该方法需要一分钟多的时间才能从 SQL 中获取 4,000 行并将它们放入对象列表中。我想做的事情可以总结为:

  1. 获取表中的所有行
  2. 根据行字段将每一行转换为相应的对象
  3. 返回该对象的列表

换句话说,我有一个对象对应于我数据库中的一行,我希望 linq 返回这些行所在的表中所有对象的列表。

我正在做的是:

public List<Article> GetAllArticlesFromDB()
    {
        using (DBEntities le = new DBEntities(this._efConnectionString))
        {
            IQueryable<ARTICLE> x = from row in le.ARTICLE select row;

            List<Article> llr = x.Select(r => new Article
            {
                 ArticleNumber = r.ARTICLE_NUMBER,
                 ArticleTitle = r.TITLE,
            }).ToList();

            return llr;
        }
    }

问题是,这个查询需要一分钟多的时间。只有两个字段,一个是 int,另一个是最大长度为 255 的字符串。一个简单的 SQL 查询就可以在不到一秒的时间内完成。但是这个 linq 查询需要一分钟多的时间。我能以某种方式优化它吗?

最佳答案

您为您的实体使用哪种 Entity Framework 上下文方法? “旧” Entity Framework 方法生成上下文对象,这些对象都是 EntityObject 派生对象并引入很多开销,构建 4000 个可能需要相当长的时间。更好的方法是使用 POCO 对象,它们非常小而且速度很快,但您可能需要使用 different generator如果您使用的是 Visual Studio 2010 和/或 EF 4(与 VS 2012 和 EF5 相比,后者允许开箱即用地生成 POCO 实体)。

您使用的是哪个 EF 版本和哪种方法?

Here is a nice tutorial展示如何使新的 DbContext 方法(针对数据库优先场景)起作用。

关于c# - 如何优化 linq 中将 ~4000 行转换到对象的 "select all"语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13502968/

相关文章:

c# - 使用 C# 窗口窗体应用程序在用户登录期间节省登录时间

c# - 在 C# 中将本地时区转换为 PST 时区

c# - ASP.Net Web Api 如何在运行时更改 token 过期时间

sql - 如果多个条件之一为真,我如何执行 JOIN?

android - 如何将图像存储在 mySQL 数据库中?

performance - LINQ to Entities -- OrderBy().ToList() 与 ToList().OrderBy()

c# - 未响应显示在标题栏中

sql - 如何在 MySQL 中重命名索引

c# - 参数数量未知的动态Where子句

linq - 用于填充 ViewModel 的 Entity Framework