标题可能需要更改。
我有一个包含TurnTime_MinHours和TurnTime_MaxHours列的表。看起来像这样
TurnTime_MinHours | TurnTime_MaxHours
---------------------------------------
0 24 //represents 1 day
24 48 //represents 1-2 days
24 72 //represents 2-3 days
24 120 //represents 1-5 days
现在,问题出现在我的MVC应用程序的View部分。我希望以一种友好,用户友好的方式显示这些数据,例如“1天”,“1-3天”,“1-5天”,而不是整数值。
我首先尝试制作一个小switch case
函数来执行此操作,但我遇到了将int
字段转换为string
字段的问题。
我刚刚为类似的情况实施了三元组,但我不确定它是否适用于这种情况。 三元参考:Handling tinyInt booleans with MVC
答案 0 :(得分:0)
这样的内容 - 您可以将范围添加到Tuple<int, int>
,然后使用TimeSpan.TotalDays
进行转换:
更新:一种替代的,不那么详细的处理方式(由于可读性,我不会进一步减少这种方法:但是,这种方法牺牲了一点性能,因为它将运行第一个TimeSpan实例转换即使在不使用时也是如此。假设这只是在一个实例中(当范围是1天时),这可能是可以接受的,并且它看起来更好。
Func<Tuple<int, int>, string> getDaysFromHoursAlternate = range =>
{
string format = range.Item2 > 24 ? "{0} - {1} days" : "{1} day";
return string.Format(format,
TimeSpan.FromHours(range.Item1).TotalDays,
TimeSpan.FromHours(range.Item2).TotalDays
);
};
原始答案w /完整代码:
class Program
{
static void Main(string[] args)
{
List<Tuple<int, int>> ranges = new List<Tuple<int, int>>()
{
new Tuple<int, int>(0, 24),
new Tuple<int, int>(24, 48),
new Tuple<int, int>(24, 72),
new Tuple<int, int>(24, 120)
};
Func<Tuple<int, int>, string> getDaysFromHours = range =>
{
string formatted;
if (range.Item2 > 24)
{
formatted = string.Format(
"{0} - {1} days",
TimeSpan.FromHours(range.Item1).TotalDays,
TimeSpan.FromHours(range.Item2).TotalDays
);
}
else
{
formatted = string.Format("{0} day",
TimeSpan.FromHours(range.Item2).TotalDays
);
}
return formatted;
};
ranges.ForEach(r =>
Console.WriteLine(getDaysFromHours(r))
);
Console.ReadKey();
}
}