2012-10-16 56 views
0

我有一个sql数据库每天写入一些c#代码,其中包含特定日期的股票信息。在运行时创建类

领域:StockCode,NumberOfHolders,价值,日期

每天有一个新的记录添加到数据库中有一个日期戳。

我需要能够创建以下格式的列表;

  date1 date2 date3 
stock1 100  104  110 
stock2 105  100  99 
stock3 150  150  80 

然而,这个名单会似乎已经是动态的,因为场会发生变化,这取决于系统中的每只股票的日期数。

所以我不能使用一个类,如;

private class Stocks: ExcelReport 
{ 
    public String StockCode { get; set; } 
    public Double TotalQtyHeld { get; set; } 
    public Double TotalValueOfStock { get; set; } 
    public DateTime Date { get; set; } 
} 

任何帮助表示赞赏。

感谢

+4

你确定你不能使用这样的类吗?看起来你想创建一个'List ',其中列表的大小是数据库中日期的数量。 – Sconibulus

+0

如果我理解正确,那么你只需要列表日期和他们可以填写的日期所需的日期数 – kabaros

回答

3

无法创建,可容纳的日期和价值观这样一个类:

private class StockValue 
{ 
    public Double TotalQtyHeld { get; set; } 
    public Double TotalValueOfStock { get; set; } 
    public DateTime Date { get; set; } 
} 

private class Stocks: ExcelReport 
{ 
    public String StockCode { get; set; } 
    public IList<StockValue> Values {get;set;} 
} 
+0

+1为更好的方法 –

+0

像这样。我会给这个去感谢。 –

1

我不知道我的理解,所以请原谅我,如果我的回答是微不足道满足您的要求。你不需要一个值列表吗?班级生成听起来像是一个天才的解决方案,但对于任务来说太复杂了。

创建日期/股票信息值(或对象)的列表。您可以使用Tuple<Date, double>作为一个类型或创建自己的自定义类:

class DataValue 
{ 
    public DateTime Date { get; set; } 
    public double Value { get; set; } 
} 

然后,只需使用的键值一个List<DataValue>

+0

您如何通过只有一个DateTime信息列表来记录数量信息? –

+0

哈哈好问题!使用神奇的DateTime类?开玩笑。我看到他需要一个自定义类或Tuple。感谢您的评论! – Mzn

0

一个列表/元组可以,只要你有2 - 你有用3个值,如果您需要更多信息,请转至Jeffery解决方案。

private class Stocks : ExcelReport 
    { 
     public String StockCode { get; set; } 
     public List<Tuple<DateTime, Double, Double>> StocksValues { get; set; } 
    } 
0

并不是说这是您使用的最佳选择,但是您可以在运行时编译自己的类并加载它们。以下是如何将文本编译为DLL的示例。

 CSharpCodeProvider codeProvider = new CSharpCodeProvider(); 

     System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters(); 
     parameters.GenerateExecutable = false; 
     parameters.GenerateInMemory = false; 
     parameters.WarningLevel = 3; 
     parameters.CompilerOptions = "/optimize"; 
     parameters.OutputAssembly = "C:\\test\\test.dll"; 
     parameters.ReferencedAssemblies.Add("Microsoft.CSharp.dll"); 
     parameters.ReferencedAssemblies.Add("System.dll"); 
     parameters.ReferencedAssemblies.Add("System.Core.dll"); 
     parameters.ReferencedAssemblies.Add("System.Data.dll"); 
     parameters.ReferencedAssemblies.Add("System.Data.DataSetExtensions.dll"); 
     parameters.ReferencedAssemblies.Add("System.XML.dll"); 
     parameters.ReferencedAssemblies.Add("System.XML.Linq.dll"); 

     CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, _BaseCode.ToArray()); 

     if (results.Errors.Count > 0) 
     { 
      LogError(results.Errors[0].ErrorText, "Error Compiling", null, "", ErrorLevel.Critical); 
      throw new Exception("Error Compiling.."); 
     } 

上面的代码只是我用来编译代码的更大方法的一个片段。一些变量不存在等。将它用作基础并查找正在使用的方法。编译代码后,您可以加载DLL并创建一个实例。下面的代码显示了一些示例。

System.Reflection.Assembly _A = System.Reflection.Assembly.LoadFile(FileLocation); 

return (T)_A.CreateInstance(_ClassName, true, System.Reflection.BindingFlags.CreateInstance, null, Arguments.ToArray(), System.Globalization.CultureInfo.CurrentCulture, null); 
+0

反思确实是一个解决方案,但它可能在这里矫枉过正。 – sgud

+0

同意。只是给选项:) –