nom*_*mad 3 linq extension-methods entity-framework
我正在使用Entity Framework检索项目列表,如果检索到一些项目,我会用它们做一些事情.
var items = db.MyTable.Where(t => t.Expiration < DateTime.Now).ToList();
if(items.Count != 0)
{
// Do something...
}
Run Code Online (Sandbox Code Playgroud)
该if
声明也可以写成
if(items.Count() != 0)
{
// Do something...
}
Run Code Online (Sandbox Code Playgroud)
在第一种情况下,这.Count
是一个List<T>.Count
属性.在第二种情况下,.Count()
是IEnumerable<T>.Count()
扩展方法.
虽然两种方法都能达到相同的效果,但是比另一种更优选吗?(可能性能有些不同?)
Enumerable.Count<T>
(扩展方法IEnumerable<T>
)只是调用Count
底层类型是一个ICollection<T>
,所以List<T>
没有区别.
Queryable.Count<T>
(用于扩展方法IQueryable<T>
)将使用基础查询提供者,它在许多情况下会向下推动计数到实际SQL,其将执行比在存储器计数对象更快.
如果应用了过滤器(例如Count(i => i.Name = "John")
)或者基础类型不是a ICollection<T>
,则枚举该集合以计算计数.
比另一个更优先?
我通常更喜欢使用Count()
1)它更便携(底层类型可以是任何实现IEnumerable<T>
或IQueryable<T>
)和2)如果需要,以后添加过滤器更容易.
正如蒂姆在评论中指出的那样,我也更喜欢使用Any()
,Count() > 0
因为它不需要实际计算项目 - 它只会检查是否存在一个项目.相反,我用!Any()
而不是Count() == 0
.
归档时间: |
|
查看次数: |
1361 次 |
最近记录: |