使用LINQ过滤对象列表

时间:2010-03-05 08:19:11

标签: c# linq generics list

我有一个自定义对象列表。这些对象上有2个日期时间属性。我需要从两个对象属性中获取唯一(忽略时间部分)datetime对象的列表。

示例

我有2个具有2个日期时间属性的对象:

object1.date1 = "01/01/2001 12:54"
object2.date1 = "01/02/2001 12:51"
object3.date1 = "01/01/2001 23:45"
object4.date1 = "01/02/2001 12:54"
object5.date1 = "01/01/2001 18:22"

object1.date2 = "09/01/2001 15:54"
object2.date2 = "09/02/2001 18:51"
object3.date2 = "08/01/2001 21:45"
object4.date2 = "08/02/2001 02:54"
object5.date2 = "07/01/2001 05:22"

这些存储在列表中:

List<MyObject>() objList = new List<MyObject>()
objList.add(object1);
objList.add(object2);

我需要在objList上执行一些LINQ来生成一个包含以下日期时间对象的新List:

01/01/2001 00:00
01/02/2001 00:00
09/01/2001 00:00
09/02/2001 00:00
08/01/2001 00:00
08/02/2001 00:00
07/01/2001 00:00

2 个答案:

答案 0 :(得分:11)

听起来你想要这样的东西:

var newList = objList.Select(x => x.date1.Date)
                     .Concat(objList.Select(x => x.date2.Date))
                     .Distinct()
                     .ToList();

这看起来对你有用吗?

答案 1 :(得分:2)

var dates = objects
    .SelectMany(o => new[] { o.date1, o.date2 })
    .Select(d => DateTime.Parse(d).Date)
    .Distinct();

您可以使用Concat和Jon建议或SelectMany(这对我来说更自然)。

当然,理想情况是将日期解析逻辑封装到MyObject类中并公开DateTime属性而不是普通字符串。