我有以下课程的列表:
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(零)。
每个部门,公司,分支和类别列的数据都应添加一次。
如何使用linq做到这一点?
答案 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}));
具有部门,公司,分支机构和类别组合的次数。
我希望这有助于理解,我的解释也不会太复杂。