OfType<>的性能vs“是”查询

时间:2013-12-07 18:21:06

标签: c# performance linq entity-framework linq-to-entities

在TPH继承中,这是否有任何区别:

context.Firms.OfType<RedFirm>()

和此:

context.Firms.Where(item => item is RedFirm);

在表现方面?

1 个答案:

答案 0 :(得分:4)

OfType<T>会返回IEnumerable<T>(或IQueryable<T>等)。它在内部执行is并将这些对象转换为仅返回T类型的对象。OfType<TResult>还包括短路检查,如果整个IEnumerable<T>可以转换为IEnumerable<TResult>然后它的执行速度会明显加快,因为它不会检查集合中的每个项目。

Where不会更改IEnumerable<T>的返回类型,因为您必须投射它们(如果需要),OfType<T>应该稍快一些,因为它包含此调用。< / p>

相关链接:Why is OfType<> faster than Cast<>?