Alternative for LINQ's .Contains()
本问题已经有最佳答案,请猛点这里访问。
我一直在寻找一些技巧来提高我的实体框架查询性能,并发现这篇有用的文章。
本文的作者提到以下内容:
08 Avoid using Contains
In LINQ, we use contains method for checking existence. It is converted to"WHERE IN" in SQL which cause performance degrades.
还有哪些更快的替代品供我使用?
包含对于您想要
的情况完全有效
EG:
1 |
(基本上)被转换为
1 | SELECT * FROM products WHERE ProductId IN (1,50,77) |
但是,如果您要检查是否存在,我建议您使用.Any(),它将转换为EXISTS-
EG
1 2 3 | var q = from p in products where p.productsLinkGroups.Any(x => x.GroupID == 5) select p |
(或多或少)被掩盖至:
1 2 3 4 5 | SELECT * FROM products p WHERE EXISTS( SELECT NULL FROM productsLinkGroups plg WHERE plg.GroupId = 5 AND plg.ProductId = p.ProductId ) |
这是非常依赖于上下文的,您应该注意的不是避免使用
此处提供了一个完美的示例:避免在子句中不使用SQL
可以通过使用联接来避免这种情况。
我想说的是