【问题标题】:Linq query to select records based on most recent sumLinq查询根据最近的总和选择记录
【发布时间】:2021-06-01 03:58:23
【问题描述】:

我正在编写一种方法,该方法根据最近购买总额相等的分组来选择客户记录(传递给该方法)。 我进行了一些搜索,但没有任何结果可以帮助我实现所需的输出。

 customerList.GroupBy(x=> x.CustomerID },
                      (key, result) =>
                      {
                       var orderedList = result.OrderByDescending(c => c.Date).ToList();

                      return new Customer
                      {
                          CustomerID = orderedList.First().CustomerID,
                          PurchaseID = orderedList.First().PurchaseID,
                          Price = orderedList.First().Price,
                     };
                   });
CUSTOMERID PURCHACEID PRICE DATE
1 11 235 01-03-2021
1 12 230 01-03-2021
1 14 235 05-04-2021
1 15 535 06-04-2021
1 16 230 07-04-2021

如果我正在寻找最近的总购买价格 1000,我应该得到

CUSTOMERID PURCHACEID PRICE DATE
1 14 235 05-04-2021
1 15 535 06-04-2021
1 16 230 07-04-2021

【问题讨论】:

  • 最好先写下你的努力
  • 当没有组合总和等于 1000 时会发生什么?
  • 它只会返回任何内容

标签: c# linq


【解决方案1】:

您可能需要使用cumulative sums 生成一个单独的列表。然后您可以使用TakeWhile 获取物品,直到达到某种条件

var list = new[] { 1, 2, 3, 4, 5 };
var sum = 0;
var cummulativeSums = list.Select(v => sum += v).ToList();
var result= list.TakeWhile((_, index) => cummulativeSums[index] < 7).ToList();
// 1, 2, 3

或者您可以通过创建中间值对一次性完成所有操作。

var list = new[] { 1, 2, 3, 4, 5 };
var sum = 0;
var result = list.Select(value => (sum += value, value))
    .TakeWhile(pair => pair.Item1 < 7)
    .Select(pair => pair.value)
    .ToList();

         

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多