【发布时间】:2013-06-07 10:49:25
【问题描述】:
在高层次上,我需要一个可以根据列的总和提取记录子集的查询,就像Linq: How to query items from a collection until the sum reaches a certain value。
然而,关键的区别在于他已经将他的记录保存在一个对象中,而我没有也不能。我的表可以有数百万条记录。如果我按照他的方式构建查询,我会收到此错误:
"A lambda expression with a statement body
cannot be converted to an expression tree"
研究了一下有道理,LINQ无法将上述引用问题中的答案转化为有效的SQL。
我将制作一个假设的表格来代表我的情况。
Order Id | Cookie Name | Qty
1 Sugar 5
2 Snickerdoodle 4
3 Chocolate chip 8
4 Snickerdoodle 10
5 Snickerdoodle 5
给定这个示例,我需要编写一个查询来获取Snickerdoodle 的第一个X 订单,直到总数量超过参数的输入(即,如果用户选择 13,它将返回记录 2 和 4 )。
我正在使用 Nhibernate.Linq,因为我更喜欢使用 LINQ。如果需要,我对 ICreate 完全开放。
附带说明,我对此既是一个概念又是一个直接问题感兴趣。即使我需要一个 Sum,也必须有一种方法来执行类似于 takewhile 的操作,直到满足条件为止。
【问题讨论】:
-
我认为是因为他也在过滤“Snickerdoodle”。
-
我建议编写 sql,而不是弄清楚 LINQ 表达式。
-
用 SQL 表示该查询可能相当复杂,这意味着使用 NH 进行查询可能更糟(如果可能的话)。杰斯是对的;先去SQL。您甚至不必转换它,NH 支持从 SQL 映射实体。
-
If the user chooses 15 It would return records 2 & 4这是正确的吗?他们的总数量不是 14 而不是 15 吗?我认为它会返回1 & 4和4 & 5。你用的是什么关系型数据库? -
是的,我是通过 snickerdoodle 过滤的。我确实犯了一个错误 Ryan,所以我更改了数字以更好地演示。如果输入为 13,它将返回 2 和 4,在 15 时它将返回 2、4 和 5。我在 SQL Server 2012 上
标签: sql linq nhibernate