C#Linq如何将每个缺失的年份和月份添加到数据中

时间:2018-11-01 12:22:32

标签: c# linq

我有以下课程的列表:

public class Data
{
    public string Sector { get; set; }
    public string Company { get; set; }
    public string Branch { get; set; }
    public string Category { get; set; }
    public string Item { get; set; }
    public string Currency { get; set; }
    public int Year { get; set; }
    public int Quarter { get; set; }
    public int Month { get; set; }
    public double Amount { get; set; }
}

根据用户指定的日期范围,我将按年和月为基础来提供数据。但是,在给定的日期范围内,没有年份和月份的数据。

var dateRange = new List<DateTime>();

for (DateTime date = Report.Parameter.BeginDate; date <= Report.Parameter.EndDate; date.AddMonths(1))
{
    dateRange.Add(new DateTime(date.Year, date.Month, 1));
}

对于给定日期范围内的每年和每月,我希望Data对象的Amount列为0(零)。

每个部门,公司,分支和类别列的数据都应添加一次。

示例: screen shot

如何使用linq做到这一点?

1 个答案:

答案 0 :(得分:0)

如果您真的需要使用Linq,它将如下所示:

    public void MyFunction(List<Data> userData)
    {
        var beginDate = DateTime.Today;
        var endDate = DateTime.Today.AddYears(2);
        var monthsApart = 12 * (beginDate.Year - endDate.Year) + beginDate.Month - endDate.Month;
        var dateRange = Enumerable.Range(0, monthsApart).Select(offset => beginDate.AddMonths(offset));

        var difference = dateRange.Where(item => !(userData.Any(uData => uData.Year == item.Year && uData.Month == item.Month)));
        userData.AddRange(difference.Select(date => new Data() {Year = date.Year, Month = date.Month, Amount = 0}));
    }

这只是一个例子。您需要在需要的地方添加逻辑。

您提到了This data should be added once for each Sector, Company, Branch and Category columns 如果要执行此操作,则必须致电

        userData.AddRange(difference.Select(date => new Data() {Year = date.Year, Month = date.Month, Amount = 0}));

具有部门,公司,分支机构和类别组合的次数。

我希望这有助于理解,我的解释也不会太复杂。