我有一种情况,我希望将跨越多天的一行数据转换为多个对象。
namespace Linq
{
class Program
{
static void Main(string[] args)
{
var item = new List<Item>
{
new Item {StartDate = DateTime.Now, EndDate = DateTime.Now.AddDays(2)},
new Item {StartDate = DateTime.Now, EndDate = DateTime.Now.AddMinutes(120)}
};
}
}
}
public class Item
{
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
}
对于输出我想这样:
由于第一行跨越了两天,我想要Row1的两行
Row1, 21/04/2016
Row1, 22/04/2016
Row2, 21/04/2016
希望这有道理吗?
答案 0 :(得分:0)
您可以尝试覆盖Item.ToString()。
e.g。
public override string ToString()
{
var endDateStr = StartDate.Date != EndDate.Date
? Environment.NewLine + EndDate.ToShortDateString()
: string.Empty;
return string.Format("{0}{1}", StartDate.ToShortDateString(), endDateStr);
}
检查here
答案 1 :(得分:0)
您可以使用Create an array or List of all dates between two dates中列出的Linq查询。
var results = items.SelectMany(i =>
Enumerable.Range(0, 1 + i.EndDate.Subtract(i.StartDate).Days)
.Select(offset => new { id = i.id, date = i.StartDate.AddDays(offset).Date})
.ToArray());
为了完成这项工作,我编辑了Item的定义如下:
public class Item
{
public int id;
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
}
您可以在https://dotnetfiddle.net/XIfMmr看到它的实际效果。请注意,结果与您想要的结果略有不同,因为DateTime.Now.AddDays(2)
将始终为3天。