【问题标题】:Filtering a list based on a condition - c#? [closed]根据条件过滤列表 - c#? [关闭]
【发布时间】:2021-06-18 17:49:26
【问题描述】:

我在名为 dataList 的变量中有一个具有以下结果模式的项目列表

{PH:8,PDate:3/22/2021, PH:8,日期:3/23/2021, PH:4,日期:3/24/2021, PH:8,日期:3/29/2021, PH:8,日期:3/30/2021, PH:4,日期:3/31/2021, PH:8,日期:4/5/2021, PH:8,PDate:4/6/2021}

这个列表可能有更多这样的项目,我只是放了一些来理解这个模式。并且列表有一个类型,可以保存一个 对象。

一天中的一周从星期一开始。所以从上面的列表中,前 3 个项目属于同一周。后 3 项属于另一周,最后 2 项属于另一周。

我想像下面这样过滤

{PH:20,PDate:3/22/2021, PH:20,日期:3/29/2021, PH:16,PDate:4/05/2021}

这就像每周的 PH 总和。任何帮助表示感谢。

【问题讨论】:

  • 不清楚您遇到了什么问题,问题看起来像问题陈述,您是否有一些代码可以解决您遇到的问题?
  • @Keith Nicholas 我现在没有任何简洁的代码可以分享。你是对的,这是一个问题,需要代码来解决这个问题。
  • 我想你想要 linq 的 WhereAggregate 函数..
  • @Richard Barker - 你能帮我一些示例代码吗?
  • 我很乐意,但我假设这是某种学习任务,我知道您可以根据我们提供的信息弄清楚。 Where 将让您过滤但不会进行求和,Aggregate 将让您进行求和,但最终不会得到列表。你必须把我认为的那些结合起来。

标签: c# list linq lambda filtering


【解决方案1】:

假设您实际上没有任何代码,您希望执行以下操作,我们从星期一开始按周数分组,然后选择第一项日期并对所有整数求和。然后在打印输出时,我们需要通过减去一周的第一天来将第一项日期调整为一周的开始。

 var list = new List<(int, DateTime)>();
        list.Add((8, new DateTime(2021,3,22)));
        list.Add((8, new DateTime(2021,3,22)));
        list.Add((4, new DateTime(2021,3,24)));
        var r = list.GroupBy(l =>
                CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(l.Item2, CalendarWeekRule.FirstFullWeek,
                    DayOfWeek.Monday))
            .Select(g => (g.Sum(x => x.Item1), g.First().Item2))
            .ToList();
        
        r.ForEach(i => Console.WriteLine($"{i.Item1} {i.Item2 - new TimeSpan(i.Item2.DayOfWeek - DayOfWeek.Monday, 0,0,0)}"));
        
        

【讨论】:

  • 感谢@Keith Nicholas 这有助于解决我的问题。
猜你喜欢
  • 1970-01-01
  • 2022-10-07
  • 2019-08-03
  • 1970-01-01
  • 1970-01-01
  • 2018-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多