【问题标题】:LINQ to extract duplicate data more than 3LINQ提取超过3个重复数据
【发布时间】:2018-09-29 09:59:34
【问题描述】:
class Year
{
    public int YearNumber;
    public List<Month> Months = new List<Month>();
}

class Month
{
    public int MonthNumber;
    public List<Day> Days = new List<Day>();
}

class Day
{
    public int DayNumber;
    public string Event;
}

所以我有一份年表 (list&lt;year&gt; years)。如何获取在同一天具有重复事件的结果的列表(另一个列表)?我的意思是事件可以在多个日期发生,没关系,重要的是,要找出任何日期是否发生了不同年份的同一事件。 .最后,(过滤)仅当其出现超过 3 次时。例如,2014 年 7 月 5 日、2017 年 7 月 5 日和 2019 年 7 月 5 日是“Abc Festival”,出现 3 次以上。所以你得到了日期、事件和计数。

【问题讨论】:

  • 事件和年份之间有什么联系?此外,展示你自己的努力将阐明你想要实现的目标。另外,你为什么不简单地使用 DateTimes?
  • 这只是一个简单的例子,实际情况并非如此。我试过按天分组,计数超过3的事件按分组,第一个分组还可以,我不知道如何对第一个分组进行第二个分组
  • 我使用这个例子是因为我的问题涉及嵌套列表,我需要检查列表列表中的所有元素。

标签: list linq nested


【解决方案1】:

仅使用您显示的课程,我们只能对日期进行分组,其中“日期”是一个月中的一天:

var query = from y in years
            from m in y.Months
            from d in m.Days
            select new { m.MonthNumber, d.DayNumber }
            into date
            group date by date
            into dateGroup
            where dateGroup.Count() > 2
            select dateGroup;
            select dateGroup;

如您所见,核心解决方案是构建new { m.MonthNumber, d.DayNumber } 对象并将它们分组。

【讨论】:

  • 在lamda表达式中怎么样?
  • from - from 结构与方法语法中的SelectMany 相同(years.SelectMany(y =&gt; y.Months) 等)。但是,查询语法的可读性要好得多。如果我是你,我不会使用方法语法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-15
  • 1970-01-01
  • 1970-01-01
  • 2018-10-30
  • 1970-01-01
相关资源
最近更新 更多