在高级别,我需要一个可以根据列的总和提取记录子集的查询,就像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
鉴于此示例,我需要编写一个查询来抓取X
的{{1}}个订单,直到求和的数量超过参数的输入(即如果用户选择13,它将返回记录2& 4)。
我正在使用Nhibernate.Linq,因为我在LINQ中更舒服。如果有需要,我对ICreate完全开放。
作为旁注,我对此感兴趣是一个概念,也是一个直接的问题。即使我需要一个Sum,也必须有一种方法可以做一些类似于执行的事情,直到满足条件为止。
答案 0 :(得分:1)
务实的方法
int needed = ...;
int actual = 0;
int page = 0;
const int pagesize = 20; // set to some sensible value, eg. the pagesize of the grid shown to the user
var results = new List<CookieOrder>();
while (actual < needed)
{
var partialResults = session.Query<CookieOrder>()
.Where(c => c.Name == "Snickerdoodle")
.OrderBy(c => c.Id)
.Skip(page * pagesize)
.Take(pagesize)
.ToList();
for(int i = 0; i < partialResults.Length && actual < needed; i++)
{
results.Add(partialResults[i]);
actual = partialResults[i].Quantity;
}
page++;
}
return results;