【发布时间】:2012-05-27 09:51:26
【问题描述】:
Any() 在以下查询中做了什么?
context.Customers
.Include("InternetSales")
.Where(c => c.InternetSales.Any())
.Take(100);
你会如何用简单的英语读出这个查询?例如,以下内容是否准确?
“通过相关的 100 次互联网销售获得客户。”
(我知道代码中没有“get”,但你明白我的意思。)
【问题讨论】:
Any() 在以下查询中做了什么?
context.Customers
.Include("InternetSales")
.Where(c => c.InternetSales.Any())
.Take(100);
你会如何用简单的英语读出这个查询?例如,以下内容是否准确?
“通过相关的 100 次互联网销售获得客户。”
(我知道代码中没有“get”,但你明白我的意思。)
【问题讨论】:
Any 运算符检查某个可枚举/集合是否包含至少一项,即它是否非空。
所以我猜你的查询可以写成:
“至少进行过一次网络销售的前 100 位客户”
或者,更接近金属:
“前 100 个具有非空
InternetSales集合的Customer对象”
.Any() 与.Count() > 0 类似,但它最多会消耗集合中的一项,而Count 会消耗整个集合,因此Any 通常效率更高,并且也适用于无限序列。如果您对项目的确切数量不感兴趣,Any 也会更清楚地表达检查非空的意图。
【讨论】:
customers.Any() 的含义比customers.NotEmpty() 的含义要容易得多。对于后者,我将不得不让我的大脑不要对非空客户的概念感到困惑:“他们像牛奶瓶吗,即它们可以是空的或满的,还是介于两者之间的东西?” OTOH,customers.Any() 的意思很明显:“有顾客吗?”
customers.Any() 关注customers 代表的内容(一组客户),而customers.NotEmpty() 关注技术上customers 的含义(集合对象) )。前一种观点通常更有助于理解代码的含义。 (再次,恕我直言。)