2012-07-26 44 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; 

享受你的日子:-)

相關問題