我读过这里,在实体框架中,如果执行包含操作,它会降低性能:
在SQL中将Contains转换为"WHERE“,从而导致性能下降”。
现在,我有将近10个表有10列,在获取记录时,我使用Contains为近8列。
我的问题不是真的吗?如果是的话,那替代方案是什么?
发布于 2012-12-01 08:16:22
是的,包含()将严重降低性能。
以便您可以尝试下面提到的解决方案.
我们能够通过添加中间表并从LINQ查询连接需要使用clause子句的LINQ查询来解决EF包含问题。我们用这种方法取得了惊人的结果。我们有一个很大的EF模型,并且在预编译EF查询时不允许使用"Contains“子句,因为对于使用"Contains”子句的查询,我们的性能非常差。
概述:
创建一个EF编译查询,类似于如下所示:
static Func<MyEntities, Guid, IEnumerable<Customer>> _selectCustomers =
CompiledQuery.Compile(
(MyEntities db, Guid containsHelperID) =>
from cust in db.Customers
join x in db.HelperForContainsOfIntType on cust.CustomerID equals x.ReferenceID where x.HelperID == containsHelperID
select cust
);使用子句中使用的值调用helper方法,并获取查询中要使用的Guid。例如,:
var containsHelperID = dbHelper.InsertIntoHelperForContainsOfIntType(new int[] { 1, 2, 3 });
var result = _selectCustomers(_dbContext, containsHelperID).ToList();我从这里那里得到的
https://stackoverflow.com/questions/13656623
复制相似问题