将int转换为MVC中的文本

时间:2014-02-13 19:29:40

标签: c# mysql asp.net-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应用程序的View部分。我希望以一种友好,用户友好的方式显示这些数据,例如“1天”,“1-3天”,“1-5天”,而不是整数值。

我首先尝试制作一个小switch case函数来执行此操作,但我遇到了将int字段转换为string字段的问题。

我刚刚为类似的情况实施了三元组,但我不确定它是否适用于这种情况。   三元参考:Handling tinyInt booleans with MVC

1 个答案:

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