首页 > 解决方案 > 如何优化使用“包含”方法的实体框架查询

问题描述

我有 ac# 代码,在其中我使用 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();

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

我需要知道提高此查询性能的可能解决方案是什么?

标签: c#performanceentity-frameworklinq

解决方案


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

  • 为 record.Name 添加索引以过滤和排序名称
  • 使用前排序列表集合

在每个步骤之后分别测量请求性能。

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

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


推荐阅读