如何优化使用“包含”方法的实体框架查询

时间:2019-12-04 12:32:29

标签: c# performance entity-framework linq

我有一个c#代码,其中我使用LINQ查询通过将字符串类型的特定属性与字符串列表进行比较来检索一堆对象。 C#代码如下:

var list = new List<string>{.....}
var query = from record in context.Records.AsNoTracking()
                        where list.Contains(record.Name)
                        orderby record.Name
                        select new 
                        {
                            ...
                        };

var result = query.ToList();

我的问题是,当列表很大时,此查询的性能会大大降低,在某些情况下,返回结果需要几分钟。

我需要知道什么方法可以提高此查询的性能?

1 个答案:

答案 0 :(得分:0)

此请求将数据库中的每一行与集合中的每一项进行比较。

  • 添加记录索引。名称以过滤和订购名称
  • 在使用之前对列表集合进行排序

分别评估每个步骤后的请求性能。

  • 在启动请求之前,检查在sql存储器中使用临时表存储列表项的可能性
  • 可以使用LinqPad将linq请求转换为sql请求以查看其性能。

如果您遭受Linq性能困扰并且非常了解SQL,则可以使用Dapper来读取请求和报告。