Linq到具有DateTime属性的对象

时间:2015-03-24 08:21:05

标签: c# linq datetime

如果你有一个集合:

public class TestObj        
{        
    public DateTime Key { get; set; }
    public int MyProperty { get; set; }
    public int MyProperty2 { get; set; }
}

该集合可能包含20,000个TestObj对象。我需要使用linq Key DateTime上的DateTime t1进行查询DateTime t2Add。 我也想从集合中插入和删除。 我看到SortedList有RemoveSortedList方法。 List<T>有效处理此问题的方法吗?我认为t1必须遍历整个列表才能确保使用t2和{{1}}获取所有对象。

1 个答案:

答案 0 :(得分:2)

您不应过分担心列表的性能。 20,000没什么。如果你有一个包含数十亿个元素的列表,那么它可能会出现问题,但即使这样,优化也会导致比它解决的问题更多的问题。

如果您想确保无关紧要,可以自行测试:

var l = new SortedList<DateTime, TestObj>();
var key = new DateTime(1995, 1, 1);
for (var i = 0; i < 20000; i++)
{
    var o = new TestObj();
    o.Key = key;
    key = key.AddDays(1);
    l.Add(o.Key, o);
}
var sw = new Stopwatch();
var date1 = new DateTime(1995, 5, 5);
var date2 = new DateTime(2010, 5, 5);
sw.Start();
var between = l.Where(x => x.Key >= date1 && x.Key <= date2).ToArray();
Console.WriteLine(between.Count());
sw.Stop();
Console.WriteLine(sw.Elapsed);

输出是:

5480(过滤掉的元素数量)和 00:00:00.0142387(你甚至不会注意到)