C#中的数据转换

时间:2015-06-05 20:12:10

标签: c#

我试图创建一个Windows应用程序,我有一个从oracle中获取的表。阅读完表后,我需要将一些列值转换为其他值。例如:

表FruitbyDate

Fruit       Fruitdate    
Apple       6/4/15 
Pearl       6/6/15
Kiwi        6/20/15
Watermelon  6/9/15

我想将水果从文本转换为int(apple = 1,pearl = 2,kiwi = 3,watermelon = 4)并将表格更新为:

Fruit       Fruitdate    
1           6/4/15 
2           6/6/15
3           6/20/15
4           6/9/15

我是C#的初学者想要了解如何在oracle中转换和更新表。我只学习了Enumerations的基础知识。但是没有足够的知识来更新每个记录从名称到数字和字符串到int。谢谢!

2 个答案:

答案 0 :(得分:2)

您正在寻找的是战略模式。实现这一点的一种非常简单的方法是简单地使用Dictionary<string, int>。例如,您可能会遇到以下情况:

static Dictionary<string, int> fruitDict = new Dictionary<string, int>
{
    { "Apple", 1 },
    { "Pear", 2 } // etc.
};

然后,您可以遍历DataTable的行(或从DataReader拉出来),然后返回查找:

myFruitVariable[currentIndex] = fruitDict[row["Fruit"]];

请注意,在进行查找之前,您应该检查以确保fruitDict ContainsKey()

使用策略模式有更复杂的处理方法,但字典可能应该足够了。

答案 1 :(得分:1)

这听起来像是enum的经典案例。这里有一些示例代码可以帮助您入门(如果不知道这是一个控制台应用程序,还是ASP.Net网站等,很难说更多):

public enum FruitType
{
  Unknown = 0,
  Apple = 1,
  Pearl = 2,
  Kiwi = 3,
  Watermelon = 4
}

// RawData has the fruit names as strings
// FruitInformation is the transformed value you're trying to create
public IEnumerable<FruitInformation> ProcessFruits(IEnumerable<RawData> rawData)
{
  var result = new List<FruitInformation>();
  foreach (var entry in rawData)
  {
    FruitType parsedFruit;
    if (!Enum.TryParse(typeof(FruitType), entry.fruit, out parsedFruit))
    {
      parsedFruit = FruitType.Unknown;
    }
    result.Add(new FruitInformation(parsedFruit, entry.FruitDate));
  }
  return result;
}