gpt4 book ai didi

c# - LINQ 查询对日期范围内的值求和

转载 作者:行者123 更新时间:2023-11-30 12:11:24 25 4
gpt4 key购买 nike

我正在尝试创建一个 linq 查询,该查询将生成日期范围的集合,其中考虑到范围可以重叠的容量值的总和,并且我想要一个总和以及重叠期间的不同日期范围.谢谢。

public ActionResult Index()
{
List<Capacities> _list = new List<Capacities>{
new Capacities {StartDate = DateTime.Parse("01/01/2013"), StopDate = DateTime.Parse("01/01/2013 06:00"), Capacity = 100},
new Capacities {StartDate = DateTime.Parse("01/01/2013 04:00"), StopDate = DateTime.Parse("01/02/2013 00:00"), Capacity = 120},
new Capacities {StartDate = DateTime.Parse("01/04/2013"), StopDate = DateTime.Parse("01/04/2013 15:00"), Capacity = 100},
new Capacities {StartDate = DateTime.Parse("01/04/2013 15:00"), StopDate = DateTime.Parse("01/04/2013 18:00"), Capacity = 150}
};
//results expected
//01/01/2013 00:00 - 01/01/2013 04:00 100
//01/01/2013 04:00 - 01/01/2013 06:00 220
//01/01/2013 06:00 - 01/02/2013 00:00 120
//01/04/2013 00:00 - 01/04/2013 15:00 100
//01/04/2013 15:00 - 01/04/2013 18:00 150
return View();
}

public class Capacities
{
public DateTime StartDate { get; set; }
public DateTime StopDate { get; set; }
public int Capacity {get;set;}
}

最佳答案

我做了一些编程,但我扩展了你的代码很多。但我最终能够使用 LINQ :-)

我的代码:

SortedSet<DateTime> splitdates = new SortedSet<DateTime>();
foreach (var item in _list)
{
splitdates.Add(item.Period.Start);
splitdates.Add(item.Period.End);
}

var list = splitdates.ToList();
var ranges = new List<DateRange>();
for (int i = 0; i < list.Count - 1; i++)
ranges.Add(new DateRange() { Start = list[i], End = list[i + 1] });

var result = from range in ranges
from c in _list
where c.Period.Intersect(range) != null
group c by range into r
select new Capacities(r.Key.Start, r.Key.End, r.Sum(a => a.Capacity));

完整代码在这里:http://pastebin.com/wazbb1r3请注意,输出因语言环境而异。此外,有些位不是必需的,例如 DateRange.Contains()。

在上面的两个循环中,我不知道如何以可读的方式将它们转换为 LINQ。

关于c# - LINQ 查询对日期范围内的值求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15586009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com