我正在使用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。
答案 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();