C# Linq查询低性能
我在C#中使用实体框架编写了以下代码:C# Linq查询低性能,c#,performance,entity-framework,linq,optimization,C#,Performance,Entity Framework,Linq,Optimization,我在C#中使用实体框架编写了以下代码: using (var db = new RespDB()) { var result = (from proj in db.ProjectModels where proj.Name.Equals(project.Name) where proj.Pl
using (var db = new RespDB())
{
var result = (from proj in db.ProjectModels
where proj.Name.Equals(project.Name)
where proj.Platform.Equals(project.Platform)
where proj.Variant.Equals(project.Variant)
where proj.MY == project.MY
where proj.Controller.Equals(project.Controller)
select proj).FirstOrDefault();
}
在代码中,“项目”是一个对象。
问题是数据库很大,这段代码非常慢,使用VisualStudio性能分析,我发现问题出在“firstordefault”方法和“where”方法上。
有没有办法优化这段代码 在实体模型中,您应该具有键或唯一索引属性。所以这个查询应该是
var result = (from proj in db.ProjectModels
where proj.ID == project.ID
select proj).FirstOrDefault();
或
如果(名称、平台、变量)是实体键或具有唯一索引。用SQL编写查询并在SSMS中运行以进行比较。这是大量的
,其中
s,我怀疑索引中是否包含所有这些列。EF性能是DB性能。不要检查C#中的性能,检查SQL查询。我不能执行第一个查询,因为这是我想用代码查找的内容,该代码的思想是查找某个项目的id,我想检查该项目实体是否存在。因此,您需要在非键属性上创建唯一索引,以定义“现有”项目是什么。
var result = (from proj in db.ProjectModels
where proj.Name == project.Name
&& proj.Platform == project.Platform
&& proj.Variant == project.Variant
select proj).FirstOrDefault();