c# - 使用多个 Contains 需要时间来加载 Linq 中的性能问题

标签 c# linq

我在一个表中有超过 600,000 条记录和 20 列。

我想使用 LINQ 查询并使用作为“LIKE”工作的函数;因此,为此我使用了 Contains。它正在花费时间(或)它抛出超时过期异常。

所以有人可以建议如何解决这个问题吗?我需要比较超过 4 列。

var majorAgents = new[] { "iPhone", "Android", "iPad" };


List<Person> lstperson =_context.person.where 
                      (w=>majorAgents.Any(x=>w.personLastName.contains(x))
                      || majorAgents.Any(x=>w.personFirstName.contains(x))
                      ||w.Address.Any(s=>majorAgents.Contains(s.addressProof)))//Address table referenced as a list 
                        .select(s=> new Person{
                             s.personId,
                             s.perosnLastName,
                             s.personFirstName
                    }).ToList();

最佳答案

也许您应该尝试对所有可能的属性运行一次 majorAgents.Any 查询。为此,您可以尝试连接 firstNamelastNameaddressProof 字段并检查 majorAgent字符串出现在这个连接字符串中的任何地方。

注意:我有意修改了与Address 相关的条件,因为它似乎与手头的任务无关。在原始查询中,它说:w.Address.Any(s=>majorAgents.Contains(s.addressProof) 这意味着“如果有任何 addressProof,请检查 majorAgents”,而更明智的做法是检查任何地址的 addressProof 是否有任何 majorAgents。为此,我使用了 w.Address.SelectMany(a => a.addressProof).ToArray() 以及string.Join 这将给我空格分隔的 addressProof 字符串,我可以在其中查找任何 majorAgent。如果这不是预期的,请修改地址的那部分以满足要求。

因此,要尝试修改的查询是:

var majorAgents = new[] { "iPhone", "Android", "iPad" };


List<Person> lstperson =_context.person.where 
                      (w=>majorAgents.Any(x=>(w.personLastName + " " + w.personFirstName + " " +string.Join(" ",w.Address.SelectMany(a => a.addressProof).ToArray())).contains(x))
                      )
                        .select(s=> new Person{
                             s.personId,
                             s.perosnLastName,
                             s.personFirstName
                    }).ToList();

希望对您有所帮助。

关于c# - 使用多个 Contains 需要时间来加载 Linq 中的性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56560490/

相关文章:

c# - 报表查看器 - 请求 SqlClientPermission 类型的权限失败

c# - 从 CSV 文件中读取最新行

c# - MEF 运行时插件更新问题

c# - 批量生成随 secret 码

c# - 如何使用 Enumerable.Range 获取备用号码?

c# - LINQ SQL 查询,SubmitChanges 未将更改提交到数据库

c# - 动态 linq 中的 Regex.IsMatch()

c# - Azure Function 计时器通过应用程序设置进行配置

c# - 大型 LINQ 分组查询,幕后发生了什么

c# - LINQ 与关系实体的连接查询