我正在使用Entity Framework检索项目列表,如果检索到某些项目,则对其执行某些操作。
var items = db.MyTable.Where(t => t.Expiration < DateTime.Now).ToList();
if(items.Count != 0)
{
// Do something...
}
if语句也可以写成以下形式:
if(items.Count() != 0)
{
// Do something...
}
在第一个案例中,
.Count
是一个List<T>.Count
属性。在第二个案例中,.Count()
是IEnumerable<T>.Count()
扩展方法。虽然这两种方法都可以达到相同的结果,但是有没有一种更受欢迎呢?(可能在性能上有所不同?)
Enumerable.Count
的优点是您可以稍后更改序列的类型而不会破坏代码。但请注意,如果不是集合,则Count()
枚举整个序列,而Any
在第一个项目处停止,因此Any
更可读且更好。 - Tim SchmelterCount()
只是为了知道是否有一条记录,那真的很低效。另外,Any
表明我想知道是否有一个项目,而不是有多少个项目。所以它也更易读。 - Tim SchmelterIQueryable<T>.Count()
来确定是否有任何记录。如果有,那么发出另一个查询并执行我上面所做的操作 (IQueryable<T>.ToList()
) 来获取项目? - sakura-bloomToList
,你就不再享受延迟查询的好处了。你现在不再使用 LINQ-to-Entities 提供程序,而是使用 LINQ-to-Objects。有许多重要的区别,例如 Count() 不再被翻译成 SQL,而是推迟到底层实现,字符串比较也不再是大小写不敏感的。 - tvanfosson