我有一个sql数据库,每天都会被一些c#代码写入,其中包含特定日期的股票信息。
字段:StockCode,NumberOfHolders,Value,Date
每天都会在数据库中添加一条带有日期戳的新记录。
我需要能够创建一个格式如下的列表;
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; }
}
任何帮助表示感谢。
由于
答案 0 :(得分: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;}
}
答案 1 :(得分:1)
我不确定我是否理解,如果我的答案对您的要求微不足道,请原谅我。你不只需要一个值列表吗?类生成听起来像天才的解决方案,但它对于任务来说太复杂了。
创建日期/股票信息值(或对象)列表。您可以使用Tuple<Date, double>
作为类型或创建自己的自定义类:
class DataValue
{
public DateTime Date { get; set; }
public double Value { get; set; }
}
然后只使用List<DataValue>
答案 2 :(得分:0)
只要您有2-3个值,键值/元组列表就可以满足您的需求。如果您需要更多信息,请访问Jeffery解决方案。
private class Stocks : ExcelReport
{
public String StockCode { get; set; }
public List<Tuple<DateTime, Double, Double>> StocksValues { get; set; }
}
答案 3 :(得分: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);