0

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

字段: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

4 回答 4

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;}
}
于 2012-10-16T16:18:51.420 回答
1

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

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

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

然后只需使用List<DataValue>

于 2012-10-16T16:19:01.323 回答
0

只要您有 2-3 个值,键值/元组列表就可以满足您的目的,如果您需要更多信息,请使用 Jeffery 解决方案。

private class Stocks : ExcelReport
    {
        public String StockCode { get; set; }
        public List<Tuple<DateTime, Double, Double>> StocksValues { get; set; }
    }
于 2012-10-16T16:28:34.197 回答
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);
于 2012-10-16T16:29:51.987 回答