使用 Linq to 对象,如何获取不同日期对象中字段的总计?
Using Linq to objects, how to get the total for the fields in the objects for different date?
我一直在寻找解决我的问题的方法,但找不到我真正需要的,所以我决定提出这个问题:
我有一个包含对象的列表。这些对象是根据文件中的数据创建的。该文件将包含大约 30 份报告。根据报告名称,在那种情况下它是 "REPORT-201",我将在列表中有 28 个对象,其中只有 2 个具有所需的日期:
'4/26/2018 12:00:00 AM'
'4/27/2018 12:00:00 AM'
日期为'1/1/0001 12:00:00 AM'
的其他26个对象,我不需要
我如何创建另一个列表来包含对象以及我需要的日期的总计。
我想,我需要以某种方式创建一个逻辑来按日期对对象进行分组,汇总所有字段并将每个对象添加到另一个列表中
我有以下逻辑创建了一个包含 28 个对象的初步列表:
for(int lineCnt = 1; lineCnt <. fileLines.Count(); lineCnt++)
{
if (fileLines[lineCnt].Contains("REPORT-201"))
{
report201 = new Report201();
report201= CreateReport201Data(lineCnt, fileLines);
listReports201.Add(report201);
lineCnt++;
}
}
我试着用以下方式总结数据:
report201Purchase = listReports201.Where(report201=> report201.ReportDate == reportDate).Sum(report201 => report201.PurchaseDec);
但这只为我提供了具有最后报告日期的对象的数据。但是,我需要一个列表,其中包含与文件中每个对象中的字段总数一样多的日期
现在,我正在尝试创建一个列表,该列表仅包含具有特定日期的对象以及这些日期的总计:
var report201FinalList = (from report201Objects in listReports201
group report201Objects by new { report201Objects.ReportDate } into grouping
orderby grouping.Key.ReportDate
select new Report201
{
ReportDate = grouping.Key.ReportDate,
PurchaseDec = ?
QuasiCashDec = ?
...etc...
}).ToList();
如何汇总对象中的字段并将这些对象添加到另一个列表中,或者是否有其他方法可以处理我需要的内容?
var report201FinalList = (from report201Objects in listReports201
group report201Objects by report201Objects.ReportDate into grouping
orderby grouping.Key
select new Report201
{
ReportDate = grouping.Key,
PurchaseDec = grouping.Sum(g => g.PurchaseDesc),
QuasiCashDec = grouping.Sum(g => g.QuasiCashDec ),
RepId = string.Join(",", grouping.Select(g => g.RepId)),
...etc...
}).ToList();
在此查询中,grouping
是一个 IGrouping<>
,一个具有键 属性 的 IEnumerable。
您的初始 linq 似乎是正确的!
错误在第一段,第二段 lineCnt++;
错误并跳过了一行。删除它并使用您编写的第一个 linq。 lineCnt=1
也可能是 Henk 首先注意到的错误。
for(int lineCnt = 0; lineCnt < fileLines.Count(); lineCnt++)
{
if (fileLines[lineCnt].Contains("REPORT-201"))
{
report201 = new Report201();
report201= CreateReport201Data(lineCnt, fileLines);
listReports201.Add(report201);
//lineCnt++;
}
}
我一直在寻找解决我的问题的方法,但找不到我真正需要的,所以我决定提出这个问题:
我有一个包含对象的列表。这些对象是根据文件中的数据创建的。该文件将包含大约 30 份报告。根据报告名称,在那种情况下它是 "REPORT-201",我将在列表中有 28 个对象,其中只有 2 个具有所需的日期:
'4/26/2018 12:00:00 AM'
'4/27/2018 12:00:00 AM'
日期为'1/1/0001 12:00:00 AM'
的其他26个对象,我不需要
我如何创建另一个列表来包含对象以及我需要的日期的总计。 我想,我需要以某种方式创建一个逻辑来按日期对对象进行分组,汇总所有字段并将每个对象添加到另一个列表中
我有以下逻辑创建了一个包含 28 个对象的初步列表:
for(int lineCnt = 1; lineCnt <. fileLines.Count(); lineCnt++)
{
if (fileLines[lineCnt].Contains("REPORT-201"))
{
report201 = new Report201();
report201= CreateReport201Data(lineCnt, fileLines);
listReports201.Add(report201);
lineCnt++;
}
}
我试着用以下方式总结数据:
report201Purchase = listReports201.Where(report201=> report201.ReportDate == reportDate).Sum(report201 => report201.PurchaseDec);
但这只为我提供了具有最后报告日期的对象的数据。但是,我需要一个列表,其中包含与文件中每个对象中的字段总数一样多的日期
现在,我正在尝试创建一个列表,该列表仅包含具有特定日期的对象以及这些日期的总计:
var report201FinalList = (from report201Objects in listReports201
group report201Objects by new { report201Objects.ReportDate } into grouping
orderby grouping.Key.ReportDate
select new Report201
{
ReportDate = grouping.Key.ReportDate,
PurchaseDec = ?
QuasiCashDec = ?
...etc...
}).ToList();
如何汇总对象中的字段并将这些对象添加到另一个列表中,或者是否有其他方法可以处理我需要的内容?
var report201FinalList = (from report201Objects in listReports201
group report201Objects by report201Objects.ReportDate into grouping
orderby grouping.Key
select new Report201
{
ReportDate = grouping.Key,
PurchaseDec = grouping.Sum(g => g.PurchaseDesc),
QuasiCashDec = grouping.Sum(g => g.QuasiCashDec ),
RepId = string.Join(",", grouping.Select(g => g.RepId)),
...etc...
}).ToList();
在此查询中,grouping
是一个 IGrouping<>
,一个具有键 属性 的 IEnumerable。
您的初始 linq 似乎是正确的!
错误在第一段,第二段 lineCnt++;
错误并跳过了一行。删除它并使用您编写的第一个 linq。 lineCnt=1
也可能是 Henk 首先注意到的错误。
for(int lineCnt = 0; lineCnt < fileLines.Count(); lineCnt++)
{
if (fileLines[lineCnt].Contains("REPORT-201"))
{
report201 = new Report201();
report201= CreateReport201Data(lineCnt, fileLines);
listReports201.Add(report201);
//lineCnt++;
}
}