我在ASP.NET MVC应用程序中使用Entity Framework,我在通过LINQ从SQL Server加载数据时遇到了问题。我的查询在4秒内返回结果,但我需要花费更少的时间,仍在寻找更好的解决方案。
这是我的linq查询:
var user =
context.CreateObjectSet<DAL.ProductMaster>()
.AsNoTracking()
.Include("Product1").AsNoTracking()
.Include("Product2").AsNoTracking()
.Include("Product3").AsNoTracking()
.Include("Product4").AsNoTracking()
.Include("Product5").AsNoTracking()
.Where(x => x.Id == request.Id)
).FirstOrDefault();
答案 0 :(得分:0)
无需让多个实体在Where()
中完成谓词,然后选择第一个;只需直接致电FirstOrDefault()
即可。
if (request == null || organizationsList == null || !organizationsList.Any())
return;
var user = context.CreateObjectSet<DAL.User>()
.AsNoTracking()
.Include("UsersinPrograms.FollowUps")
.Include() ...
.FirstOrDefault(x => x.Id == request.userId && organizationsList.Contains(x.OrganizationId)));
此外,删除您不需要的Include()
。
答案 1 :(得分:0)
对于此和任何大规模业务逻辑操作,应该创建存储过程而不是基于Linq。然后在EF中创建一个DTO对象来处理结果并使用EF中的过程。
此时获得或丢失的速度取决于程序sql的结构,并着眼于数据库中使用的索引可能提供速度增强。
Linq SQL真的是样板,不是为速度而设计的。
我已经完成了多个EF项目。
还可以在Linqpad中构建他们的linq查询,然后切换到查看生成的SQL。这将提供如何在存储过程中构造一个SQL的想法。
此外,您可以考虑使用SQL CTE(通用表格表达式)一次一步地构建查询,直到数据符合需要为止。