C# 林克!Contains()替换项
我正在尝试改进使用linq和fluent API的查询的性能 查询如下所示:C# 林克!Contains()替换项,c#,linq,C#,Linq,我正在尝试改进使用linq和fluent API的查询的性能 查询如下所示: var result = DbContext.Set<Parent>() .Join(DbContext.Set<Child>(), (parent) => parent.Id, (child) => child.ParentId, (parent,
var result = DbContext.Set<Parent>()
.Join(DbContext.Set<Child>(),
(parent) => parent.Id,
(child) => child.ParentId,
(parent, child) => cild)
.Select(x => new { x.SomeOtherId, x.AnotherId })
.Where(x => !filters.Contains(x.SomeOtherId))
.Select(x => x.AnotherId )
.Distinct()
.ToListAsync(cancellationToken);
这将在有匹配项的情况下给出结果,但是在没有匹配项的情况下如何找到结果
谢谢“.包含会降低性能”确定吗?你量过了吗?什么是
过滤器
?如果它是一个物化的列表
或类似的列表,那就可以了。如果它本身是一个查询,那么查询将一次又一次地执行。?“据我所知,.Contains会降低性能”您是否确实对此进行了分析以确保这是您的瓶颈?@JoshuaDunn!包含
生成一个不在(id1、id2、ide等)中的SomeOtherId
,其性能取决于SomeOtherId
是否被索引<代码>包含不会降低性能。缺乏索引确实是一个问题
.Join(filters, (c) => c.SomeOtherId, (filterId) => filterId, (c, filterId) => c.AnotherId);