在TPH继承中,这两种方式有差异:
在性能方面呢?
context.Firms.OfType<RedFirm>()
以及这个:
context.Firms.Where(item => item is RedFirm);
在性能方面呢?
context.Firms.OfType<RedFirm>()
以及这个:
context.Firms.Where(item => item is RedFirm);
OfType<T>
返回一个 IEnumerable<T>
(或者一个 IQueryable<T>
或者其他的类型)。其内部使用了 is
操作符并将对象转换为 T 类型,只返回这些类型的对象。如果整个 IEnumerable<T>
可以强制转换为 IEnumerable<TResult>
,那么 OfType<TResult>
还包括一个短路检查,并且会更快地执行,因为它不会检查集合中的每个单个项。
Where
不改变 IEnumerable<T>
的返回类型,而且由于你必须对它们进行强制转换(如果需要),所以 OfType<T>
应该会稍微快一点,因为它包含了这个调用。
is
或OfType<T>
。 - Michael DunlapSystem.Linq.Enumerable.OfType<>
,它没有您提到的短路检查(.NET 4.7.1)。 - yv989c
SELECT ... FROM [Firms] WHERE [Discriminator] = 'RedFirm'
。 - Slauma