2012-10-16 146 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

同意。只是給選項:) –