【问题标题】:What's the equivalence of an SQL WHERE in Lambda expressions?Lambda 表达式中的 SQL WHERE 等价物是什么?
【发布时间】:2010-11-05 06:58:27
【问题描述】:

这是我所拥有的:

decimal sum = _myDB.Products.Sum(p => p.Price).GetValueOrDefault();

我还有两个约会:DateTime startDateTime end
我想检索开始和结束之间所有产品价格的总和,但我不知道如何将变量合并到 lambda 方程中。

如何将变量合并到 lambda 方程中以给出一些规范?

【问题讨论】:

    标签: c# asp.net-mvc entity-framework lambda


    【解决方案1】:

    使用Enumerable.Where

    decimal sum = _myDB.Products
                       .Where(p => (p.Date >= start) && (p.Date <= end) )
                       .Sum(p => p.Price)
                       .GetValueOrDefault();
    

    【讨论】:

    • 在实现方面同意,但是这样的查询在多行上会更清晰。排列点:)
    • 关于格式的好点 - 为了保持一致性,我只是坚持使用他原来问题的格式方法,但这是我通常在自己的代码中编写它的方式。
    • @Jon:完成。直到现在才看到您的评论。
    • 好点乔恩。总有一些东西要学(甚至从 cmets 那里)。哈哈:)
    【解决方案2】:
     decimal sum = _myDB.Products
    .Where(p => p.Start >= mystartDate && p.End <= myenddate)
    .Sum(p => p.Price)
    

    请原谅我的语法。但是,我希望你能明白。

    编辑:根据 Reed 的建议进行了更正。
    旧代码(不正确)

     decimal sum = _myDB.Products
    .Sum(p => p.Price)
    .Where(p => p.Start >= mystartDate && p.End <= myenddate)
    

    【讨论】:

    • Where 子句需要放在 Sum 之前。 Sum 返回一个小数,你不能对一个小数做".Where"。
    • 伙计们,这会有不同的工作方式(即不同于 WHERE 和 SUM)吗?
    • 这根本不会编译。您不能在单个值上运行 .Where,这是 Sum() 返回的值。
    • 没问题。当您使用这样的流畅接口时,每个方法都会返回一个新对象。对于 Where() 之类的方法,它返回一个新的 IEnumerable,这就是您可以将它们“链接”在一起的原因。 .Sum() 只返回一个值(十进制),所以你不能在 Sum() 之后执行另一个期望 IEnumerable 的方法
    【解决方案3】:
    _myDB.Products
    .Where(p => p.start >= "somevalue")
    .Where(p => p.end <= "somevalue")
    .Sum(p => p.Price).GetValueOrDefault();
    

    【讨论】:

    • 没有必要有两个带有独立谓词的 where 子句。
    猜你喜欢
    • 2011-01-07
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 2010-09-24
    • 1970-01-01
    相关资源
    最近更新 更多