C# 使用Linq to对象,如何获得不同日期对象中字段的总数?
我一直在寻找问题的解决方案,但找不到我真正需要的,因此我决定提出以下问题: 我有一个包含对象的列表。这些对象是基于文件中的数据创建的。该文件将包含大约30份报告。根据报告名称,如果是“report-201”,我将在列表中有28个对象,其中只有2个具有所需日期:C# 使用Linq to对象,如何获得不同日期对象中字段的总数?,c#,linq-to-objects,C#,Linq To Objects,我一直在寻找问题的解决方案,但找不到我真正需要的,因此我决定提出以下问题: 我有一个包含对象的列表。这些对象是基于文件中的数据创建的。该文件将包含大约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个对象,我不需要 如何创建另一个列表,该列表将包含具有所需日期总计的对象。 我想
'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++;
}
}
但这只提供了具有上次报告日期的对象的数据。但是,我需要一个列表,其中包含的日期与文件中的日期一样多,并且包含每个对象中字段的总数
现在,我正在尝试创建一个列表,该列表将只包含具有特定日期的对象以及这些日期的总计:
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();
在这个查询中,分组
是一个i分组
,一个带有键属性的IEnumerable
在这个查询中,
分组
是一个i分组
,一个带有键属性的IEnumerable。您的初始linq似乎是正确的
错误出现在第一个代码段,第二个lineCnt++代码>错误并跳过一行。删除它并使用您编写的第一个linqlineCnt=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++;
}
}
for(int-lineCnt=0;lineCnt
您的初始linq似乎正确
错误出现在第一个代码段,第二个lineCnt++代码>错误并跳过一行。删除它并使用您编写的第一个linqlineCnt=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++;
}
}
for(int-lineCnt=0;lineCnt
发布CreateReport201Data创建的类。我们甚至无法判断ReportDate是字符串还是DateTime等。发布CreateReport201Data创建的类。我们甚至不知道ReportDate是字符串还是DateTime,等等。是的,很好。还值得补充的是,它应该是lineCnt=1;是的,接球不错。还值得补充的是,它应该是lineCnt=1;谢谢你的提示。但是我如何以同样的方式处理字符串值呢?示例:RepID=grouping。选择(g=>g.RepID)
,因为每个对象可能具有不同的RepID值。这个例子不起作用,但想法保持不变,不清楚你想要什么。分组可以/应该包含多个不同的repid。请参阅我关于发布课程的评论。至少作为大纲图。我的意思是,每个对象都有ID,我正在尝试使用分组来获取每个对象的RepID。我需要将RepID分配给分组逻辑创建的新对象:`RepID=grouping.Select(id=>id.RepID)`您还没有阐明1-N关系。我不确定您所说的阐明是什么意思。report201
列表中的每个对象都有一个名为RepID的字段。它不是一个数字,因此在分组时使用和将不起作用。在添加到新列表时,我需要将每个对象中的字段指定给RepID谢谢你的提示。但是我如何以同样的方式处理字符串值呢?示例:RepID=grouping。选择(g=>g.RepID)
,因为每个对象可能具有不同的RepID值。这个例子不起作用,但想法保持不变,不清楚你想要什么。分组可以/应该包含多个不同的repid。请参阅我关于发布课程的评论。至少作为大纲图。我的意思是,每个对象都有ID,我正在尝试使用分组来获取每个对象的RepID。我需要将RepID分配给分组逻辑创建的新对象:`RepID=grouping.Select(id=>id.RepID)`您还没有阐明1-N关系。我不确定您所说的阐明是什么意思。report201
列表中的每个对象都有一个名为RepID的字段。它不是一个数字,因此在分组时使用和将不起作用。添加到新列表时,我需要将每个对象中的该字段指定给RepID