2013-10-08 148 views
0

我有時間跨度的陣列是在15個分鐘的間隔,例如,時間跨度顯示:如何在以30個分鐘間隔

00:00:00,

零時15分00秒,

00:30:00,

0點45分00秒,

01:00:00

我想循環,只顯示那些間隔30分鐘。我試過使用.compare,但這並不完全符合我的需要。

例如:

var interval = TimeSpan.FromMinutes(30); 
foreach(var t in MyArray) 
{ 
    if(TimeSpan.Compare(inteval, t.Time) == 0) 
     Do something 
    } 
} 

這種技術上的工作,但將只匹配00:30:00。我可以間隔添加到循環並使用類似:

var interval = new TimeSpan(t.Hour, 30, 0) 

但只得到00:30:0001:30:00

是否有辦法讓小時像通配符一樣每30分鐘獲得一次?

我想輸出是:

00:00:00

00:30:00

01:00:00

01:30:00

回答

8

你想要的是一個模操作,但由於時間跨度本身不定義,使用TotalMinutes(或其他屬性),以獲得一個普通的整數,然後用模:

if ((int)t.TotalMinutes % 30 == 0) 
+0

工作,謝謝。你知道是否有可能在linq中以某種方式在實體中執行此操作?我試圖在查詢中做,而不是在視圖中,但說linq不支持實體。 – Jeff

+0

您使用什麼數據類型將TimeSpans存儲在數據庫中? –

+0

該列被定義爲時間。我試過類似於: _timeShiftRepository.QueryWithNoTracking.OrderBy(x => x.TimeShiftName).Where(x =>(int)x.TimeShiftName.TotalMinutes%30 == 0).ToList() – Jeff

0

您還可以過濾陣列爲每個第二項..然後使用新陣列和打印順序:

var newArray = MyArray.Where((t, index) => index % 2 == 0).ToArray(); 

這給你列表中的每一個項目。

相關問題