2014-02-13 48 views
0

标题可能需要更改。将int转换为MVC中的文本

我有一个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应用程序的视图部分。我想以一种很好的,用户友好的方式显示这些数据,比如“1天”,“1-3天”,“1-5天”而不是整数值。

我第一次尝试做一个小的switch case函数,会这样做,但我遇到了将我的int字段转换为string字段的问题。

我刚刚为类似的情况实现了三元组,但我不确定它是否可以在这种情况下工作。 三元参考:Handling tinyInt booleans with MVC

+1

的简单方法[转换数小时至数天](http://stackoverflow.com/questions/16182206/convert-hours-to-days-in-c -尖锐) – Jonesopolis

回答

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 
    ); 
}; 

原来的答复瓦特/全码:

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(); 
    } 
}