代码之家  ›  专栏  ›  技术社区  ›  jlembke

Linq:如何从集合中查询项,直到总和达到某个值

  •  13
  • jlembke  · 技术社区  · 16 年前

    鉴于以下目标:

    public class Product {
       string Name {get;} 
       int Quantity {get;}
    }
    

    使用Linq,我将如何查询 List<Product> >= 一定数量?换句话说,如果我的清单

    Name     Quantity
    -----------------
    prod1       5
    prod2       6
    prod7       7
    

    >=8 . 在这种情况下,我会得到列表中的前两项。如果我想要一个总数 >= 12

    我知道我可以写一个循环来完成这项工作,但我幻想有一个光滑的单行程序使用Linq来实现同样的事情。

    谢谢

    2 回复  |  直到 16 年前
        1
  •  25
  •   JaredPar    16 年前

    这是一个快速2班轮。

    var sum = 0;
    var query = col.Where(x => { var temp = sum; sum += x.Quantity; return temp < 500; });
    

    将500替换为您选择的常量或变量。

    这是mquander更有效的解决方案

    var sum = 0;
    var query = col.TakeWhile(x => { var temp = sum; sum += x.Quantity; return temp < 500; });
    
        2
  •  1
  •   GraemeF    16 年前

    您只需创建一个变量来保存总和,然后在使用 where 条款:

    int sum = 0;
    from product in list where (sum += product.Quantity) < 8 select product