0

特定の日付の株式情報を含むいくつかの c# コードによって毎日書き込まれる SQL データベースがあります。

フィールド: 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; }
}

どんな助けでも感謝します。

ありがとう

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

私が理解しているかどうかわからないので、私の答えがあなたの要件に些細なことである場合はご容赦ください. 値のリストが必要なだけではありませんか? クラス生成は天才的な解決策のように聞こえますが、このタスクには複雑すぎます。

日付/株式情報の値 (またはオブジェクト) のリストを作成します。を Type として使用するTuple<Date, double>か、独自のカスタム クラスを作成できます。

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

次に、List<DataValue>

于 2012-10-16T16:19:01.323 に答える
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 に答える
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 に答える