我有一个List,每个Foo包含一个List,
我想根据DateTime列表中的条件过滤List中的项目。例如,我想获得嵌入列表中具有重复日期时间的所有Foo项。
我已经尝试了很多东西,但我认为我的逻辑在我想要实现的目标中存在轻微缺陷。任何帮助表示赞赏。
感谢。
答案 0 :(得分:0)
我相信你正在寻找这样的东西:
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; }
}
答案 1 :(得分:0)
这可能会对你有帮助(尽管很难弄清楚你有什么需要,正如安德鲁已经说过的那样):
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;
}
}
免责声明:根本没有效率。使用不同的数据结构或更复杂的算法可以加快速度。
答案 2 :(得分:0)
尝试
var duplicateDateFoos = foos.Where(foo => foo.DateTimes.GroupBy(d => d).Any(dateGroup => dateGroup.Count() > 1));
对于每个foo,这将按DateTime值对DateTimes列表进行分组。如果存在,对于特定的foo,存在一个包含多个项目的分组 - 即此foo的DateTimes中至少有两个条目具有相同的值 - 那么这个foo将被添加到duplicateDateFoos列表中。