gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:21:06 27 4
gpt4 key购买 nike

我有一个执行一些 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com