DateTime将数据项分成列表

P.B*_*key 0 c# linq

鉴于上课

public class SomeType
{
    public string Name;
    public string Field2;
    public DateTime CreatedOnDateTime
}
Run Code Online (Sandbox Code Playgroud)

我想把List<SomeType>它分成几个List<SomeType>,其中每个List包含具有相同CreatedOnDateTime标记的项目.在许多情况下,CreatedOnDateTime将是相同的,允许几秒钟的容差会很好.

我可以多次运行LINQ查询来创建每个不同的列表.有更有效的机制吗?换句话说,使用某种类型的分组机制可以使用LINQ构建这种类型的查询吗?(当我说分组我想象一个RegEx)

Jon*_*eet 5

为什么要使用正则表达式?那是文本模式匹配.这听起来像你想要的ToLookup:

var lookup = list.ToLookup(x => x.CreatedOnDateTime);

foreach (var entry in lookup)
{
    Console.WriteLine("Created: {0}", entry.Key);
    foreach (var item in entry)
    {
        Console.WriteLine("  {0}, {1}", item.Name, item.Field2);
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,这将用于相同的时间戳.这样创建"容差"很困难,但您可以将条目有效地"舍入"到几秒钟:

var lookup = list.ToLookup(x => RoundDownToTwoSeconds(x.CreatedOnDateTime));

...

private static DateTime RoundDownToTwoSeconds(DateTime input)
{
    return new DateTime(input.Year, input.Month, input.Day, input.Hour,
                        input.Minute, (input.Second / 2) * 2,
                        input.Kind);
}
Run Code Online (Sandbox Code Playgroud)

(想想一个更好的名字,如果你想:)

简单的"宽容"很难的原因是这种情况:

Entry 1: 12:05:14
Entry 2: 12:05:15
Entry 3: 12:05:16
Entry 4: 12:05:17
Run Code Online (Sandbox Code Playgroud)

条目1和2只相隔一秒......因此它们应该放在同一个桶中.但是条目2和3只相差一秒......因此它们也应该在同一个桶中.条目3和4仅相隔一秒,因此条目4也应该在同一个桶中.现在我们在同一个桶中分别有3秒和4秒的条目.