2014-02-13 75 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(); 
    } 
}