【问题标题】:What does Any() mean in this LINQ query?Any() 在这个 LINQ 查询中是什么意思?
【发布时间】:2012-05-27 09:51:26
【问题描述】:

Any() 在以下查询中做了什么?

context.Customers
    .Include("InternetSales")
    .Where(c => c.InternetSales.Any())
    .Take(100);

你会如何用简单的英语读出这个查询?例如,以下内容是否准确?

“通过相关的 100 次互联网销售获得客户。”

(我知道代码中没有“get”,但你明白我的意思。)

【问题讨论】:

    标签: c# linq any


    【解决方案1】:

    Any 运算符检查某个可枚举/集合是否包含至少一项,即它是否非空。

    所以我猜你的查询可以写成:

    “至少进行过一次网络销售的前 100 位客户”

    或者,更接近金属:

    “前 100 个具有非空 InternetSales 集合的 Customer 对象”

    .Any().Count() > 0 类似,但它最多会消耗集合中的一项,而Count 会消耗整个集合,因此Any 通常效率更高,并且也适用于无限序列。如果您对项目的确切数量不感兴趣,Any 也会更清楚地表达检查非空的意图。

    【讨论】:

    • 也许 NotEmpty() 的同义词会很好:)
    • @NetMage:恕我直言,直观理解customers.Any() 的含义比customers.NotEmpty() 的含义要容易得多。对于后者,我将不得不让我的大脑不要对非空客户的概念感到困惑:“他们像牛奶瓶吗,即它们可以是空的或满的,还是介于两者之间的东西?” OTOH,customers.Any() 的意思很明显:“有顾客吗?”
    • @NetMage:或者,换个说法,customers.Any() 关注customers 代表的内容(一组客户),而customers.NotEmpty() 关注技术上customers 的含义(集合对象) )。前一种观点通常更有助于理解代码的含义。 (再次,恕我直言。)
    • 你的答案的第一行解释 .Any() 非空的事实让我不这么认为:)
    • @NetMage:你在一定程度上是对的,我想我可以在那里改进我的答案。我在写完原始答案后的一段时间内添加了上述两个 cmets,并且从那时起可能学到了一些东西。
    猜你喜欢
    • 2011-05-26
    • 2011-03-12
    • 1970-01-01
    • 1970-01-01
    • 2015-06-08
    • 2012-09-14
    • 1970-01-01
    • 2023-02-14
    • 2014-02-27
    相关资源
    最近更新 更多