Lambda 表达式中的 SQL WHERE 等价物是啥?
Posted
技术标签:
【中文标题】Lambda 表达式中的 SQL WHERE 等价物是啥?【英文标题】: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 start
、DateTime end
我想检索开始和结束之间所有产品价格的总和,但我不知道如何将变量合并到 lambda 方程中。
如何将变量合并到 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_myDB.Products
.Where(p => p.start >= "somevalue")
.Where(p => p.end <= "somevalue")
.Sum(p => p.Price).GetValueOrDefault();
【讨论】:
没有必要有两个带有独立谓词的 where 子句。以上是关于Lambda 表达式中的 SQL WHERE 等价物是啥?的主要内容,如果未能解决你的问题,请参考以下文章