【问题标题】:What is difference between these two linq queries?这两个 linq 查询有什么区别?
【发布时间】:2014-01-17 21:32:00
【问题描述】:

下面有两个 linq 查询,它们返回完整的差异结果,第一个查询返回 4 条记录,第二个返回 72 条记录。我认为他们是一样的。谁能解释他们为什么返回差异记录集。感谢您的帮助。

void Main()
{
    var q1 = from c in Customers
            where !c.Orders.Any(o => o.OrderDetails.Sum(od => od.UnitPrice * od.Quantity) < 1000)
            select new {c.CustomerID, c.ContactName};

    q1.Dump();

    var q2 = from c in Customers
             where c.Orders.Any(o => o.OrderDetails.Sum(od => od.Quantity * od.UnitPrice) >= 1000)
             select new {c.CustomerID, c.ContactName};

    q2.Dump();
}

【问题讨论】:

  • 可能更容易理解:!Any()All()一样
  • 不同之处可能在于数据库评估 NULL 的方式,但对将发生的事情列为答案还不够自信。

标签: c# linq linq-to-sql linqpad


【解决方案1】:
  1. 第一个返回没有任何总价低于 1000的订单的客户。
  2. 第二个返回任何总价大于或等于到1000的订单的客户。

换句话说,假设一个客户下了一个总价小于 1000 的订单,而另一个总价大于 1000 的订单。由于订单较小,客户记录不会包含在第一个结果集中,但由于顺序较大,它包含在第二个结果集中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    • 2016-05-06
    • 2017-04-19
    • 2013-04-11
    • 2012-04-19
    相关资源
    最近更新 更多