繁体   English   中英

Linq查询嵌套列表

[英]Linq Query nested List

我有一个列表,每个Foo都包含一个列表,

我想根据DateTime列表中的条件过滤List中的项目。 例如,我要获取嵌入列表中具有重复日期时间的所有Foo项目。

我已经尝试了很多方法,但是我认为我的逻辑在我要实现的目标中有些缺陷。 任何帮助表示赞赏。

谢谢。

我相信您正在寻找这样的东西:

List<Foo> foos = new List<Foo>();

Random r = new Random();

for (int i = 0; i < 100; i++)
{
    foos.Add(new Foo { Bar = DateTime.Now.Date.AddDays(r.Next(0, 365)) });
}

IList<Foo> filteredFoos = foos.Where(f1 => foos.Count(f2 => f2.Bar == f1.Bar) > 1).ToList();

Foo的样子:

class Foo
{
    public DateTime Bar { get; set; }
}

这可能会为您提供帮助(尽管正如安德鲁已经指出的那样,即使很难弄清您的需求/需求):

public class Foo
{
    public Foo(IEnumerable<DateTime> dates)
    {
        this.Dates = new List<DateTime>(dates);
    }

    public IList<DateTime> Dates { get; private set; }

    public static IEnumerable<Foo> FindFoos(IList<Foo> source)
    {
        return from f in source
               where f.Dates.Distinct().Count() < f.Dates.Count
               select f;
    }
}

免责声明:根本没有效率。 使用不同的数据结构或更复杂的算法可以加快速度。

尝试

var duplicateDateFoos = foos.Where(foo => foo.DateTimes.GroupBy(d => d).Any(dateGroup => dateGroup.Count() > 1));

对于每个foo,这都会将DateTime列表按其DateTime值分组。 如果对于一个特定的foo,存在一个包含多个项目的分组-即,该foo的DateTimes中至少有两个条目具有相同的值-则此foo将被添加到plicateDateFoos列表中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM