对同一对象进行多个查询的任意()Linq方法。C#EF核心

对同一对象进行多个查询的任意()Linq方法。C#EF核心,c#,sql-server,linq,entity-framework-core,C#,Sql Server,Linq,Entity Framework Core,我做了几次搜索,我仍在努力解决这个问题。 我想使用sql server Exists()在EF core上执行此查询: 问题是,在sql server中,执行下面的查询大约需要2秒钟。在C#上,使用Any()方法需要1分钟以上的时间。它使 对HutOperationHistory和HutPropertyValue表的若干查询 //需要1-2秒 select * From Hut h where exists( select 1 from HutOperationHistory

我做了几次搜索,我仍在努力解决这个问题。 我想使用sql server Exists()在EF core上执行此查询:

问题是,在sql server中,执行下面的查询大约需要2秒钟。在C#上,使用Any()方法需要1分钟以上的时间。它使 对HutOperationHistory和HutPropertyValue表的若干查询

//需要1-2秒

select * From Hut h where exists(
    select 1 from HutOperationHistory 
             where HutId = h.HutId and HutOperationId = 4
)
and exists(
    select 1 from HutPropertyValue 
             where HutId = h.HutId and Value = 'HUT_SUPPLIER_PROPERTY_NAME'
)
and exists(
    select 1 from HutPropertyValue 
             where HutId = h.HutId and Value = 'BUY_ORDER_PROPERTY_NAME'
)
and exists(
    select 1 from HutPropertyValue 
             where HutId = h.HutId 
             and Value = 'WORK_ORDER_PROPERTY_NAME'
)
我在linq上做的,是这样的:

// takes more then 1 minute



  var huts = coreDbContext.Huts
        .Include(x => x.PropertyValuesList).ThenInclude(y => y.HutProperty)
        .Include(x => x.OperationHistoriesList)
        .Where(
            x => 
             x.OperationHistoriesList.Any(
                z => ( z.HutOperation.hutOperationId = 4 )
            )
            && x.PropertyValuesList.Any(b => 
                    b.Value.Equals(hutSupplierPropName, StringComparison.CurrentCultureIgnoreCase)                  
                )
            && x.PropertyValuesList.Any(b =>
                b.Value.Equals(buyOrderPropName, StringComparison.CurrentCultureIgnoreCase)             
            )
            && x.PropertyValuesList.Any(b =>
                b.Value.Equals(workOrderPropName, StringComparison.CurrentCultureIgnoreCase)                
            )
        )
        .OrderBy(x => x.Order)
        .ToList();
我能做些什么来加快速度吗


提前谢谢

请尝试Count()>0,而不是Any()。在过去,我使用它获得了性能提升

你能做内部联接而不是where子句吗?我不能在linq上做那些类型的内部联接。我需要使用类似于exists()的东西。您能更具体地解释一下为什么不能使用内部联接吗?您可能根本不应该使用include,除非您需要返回的对象填写所有这些属性。但你不是在用这种方式比较苹果。您最初的SQL查询并没有返回每个表中的所有数据,但您正在将LINQ查询强制为。EF针对“最常见”的情况进行了优化。它也几乎是一个黑匣子。因此,如果您不喜欢它从LINQ生成SQL的方式,那么您可以编写自己的SQL并只使用EF的ORM部分。