2013-10-08 99 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(); 

这给你列表中的每一个项目。

相关问题