我有一个执行一些 linq 操作的方法,该方法需要一分钟多的时间才能从 SQL 中获取 4,000 行并将它们放入对象列表中。我想做的事情可以总结为:
- 获取表中的所有行
- 根据行字段将每一行转换为相应的对象
- 返回该对象的列表
换句话说,我有一个对象对应于我数据库中的一行,我希望 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/