2012-07-26 102 views
4

我创建了一个简单的类,它表示一个项目:如何从包含日期的对象列表中获取最小日期?

public class EntityAuftrag 
{ 
    public string cis_auftrag { get; set; } 
    public string bezeich { get; set; } 
    public DateTime? dStart { get; set; } 
    public DateTime? dEnd { get; set; } 
    public decimal? aufstunde { get; set; } 
    public int id_auftrag { get; set; } 
    public string barcolor { get; set; } 
} 

现在我有这些的列表。我想提取最小的日期,我该怎么做?

回答

22

您可以使用Enumerable.Minnull值将被忽略,除非所有值都为空):

DateTime? smallest = auftragList.Min(a => a.dStart); 

编辑:如果你想找到的最早(开始)日期的对象,你可以使用OrderByFirst

EntityAuftrag auft = auftragList.OrderBy(a => a.dStart).First(); 

如果你想要最新的日期,你可以使用Enumerable.OrderByDescending代替。

+1

'Min'似乎不会自动折扣空值。 – 2012-07-26 08:24:01

3

你可以使用MIN()LINQ扩展方法:

collection.Min(item => item.dStart);

我看到你的约会对象属性是空的,所以如果你想避免空值,使用以下命令:

collection.Where(item=> dStart.HasValue).Min(item => item.dStart);

+2

'Min'似乎可以避免空值,所以后面的例子是不需要的。 – 2012-07-26 08:23:14

+0

感谢Adam的纠正。 但无论如何,当你查询你的数据是空的并不总是欢迎:) – Tamir 2012-07-26 08:28:38

1

你可以简单地用Linq来做到这一点。由于要与最早dStart的对象,你可以做到以下几点:

List<EntityAuftrag> list = someSourceOfItems; 

EntityAuftrag firstObject = list.OrderBy(i => i.dStart).First() as EntityAuftrag; 

或者(不知道上面是正确的语法),你可以这样来做:

List<EntityAuftrag> list = someSourceOfItems; 

EntityAuftrag firstObject = (from item in list 
          orderby item.dStart 
          select item).Single() as EntityAuftrag; 

享受你的日子:-)