LINQ .Select()非常慢

时间:2017-12-29 16:35:27

标签: c# entity-framework linq select entity-framework-core

我正在使用EF Core。我在数据库表文章中有大约2500条记录。

在使用EF编译SQL的管理工作室中,我得到的结果很少。在程序约30secs。 .Select()是个问题。我不知道如何优化它。

1:之前

List<Article> articles = await db.Articles.Select(x => new Article { Title = x.Title, Description = x.Description, Body = x.Body, Authors = x.Authors, PhotoAuthors = x.PhotoAuthors, Tags = x.Tags }).ToListAsync();

2:现在

List<Article> articles = await db.Articles.FromSql("SELECT [x].[Title], [x].[Description], [x].[Body], [x].[Authors], [x].[PhotoAuthors], [x].[Tags] FROM[Articles] AS[x]").Select(x => new Article { Title = x.Title, Description = x.Description, Body = x.Body, Authors = x.Authors, PhotoAuthors = x.PhotoAuthors, Tags = x.Tags }).ToListAsync();

结果仍然相同:/

编辑:解决方法是不使用.ToList()

使用:

IQueryable<Article> articles = db.Articles.Select(x => new Article { Title = x.Title, Description = x.Description, Body = x.Body, Authors = x.Authors, PhotoAuthors = x.PhotoAuthors, Tags = x.Tags }).AsNoTracking();

IQueryable失去了我后来使用过的.Split等函数或者Intersects。

2 个答案:

答案 0 :(得分:0)

我认为你在考虑它。

var articles = db.Articles.ToList();

为您提供文章列表。如果你真的不想选择额外的字段,那么你可以做一个

var articles = db.Articles.Select(x => new {...}).ToList();

但一般来说,你不应该看到抓住整个vs只是一些标题之间的差异。您可能需要的是.Where以限制事物,但如果您真的需要它,请保持简单。

答案 1 :(得分:-1)

AsNoTracking()应该加快速度

var articles = db.Articles.AsNoTracking().ToList();