C# Linq查询低性能

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

我在C#中使用实体框架编写了以下代码:

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();