2012-03-13 11 views
1

データテーブル内の文字列データ型列の合計を計算します。データテーブルの合計文字列データ型

Int32 omarks = Convert.ToInt32(dt.Compute("Sum(Convert(Marks, 'System.Int32'))", "")); 
tbobtained.Text = omarks.ToString(); 

しかし、私はこのエラーを取得しています:

私はすでにこれを試してみましたが、集計の引数で

構文エラー:可能な子修飾子を持つ単一列の引数期待を。これについて

答えて

2

方法:

int omarks = dt.Rows.Select(dr=>(int)dr["Marks"]).Sum(); 
tbobtained.Text = omarks.ToString(); 

drは、データローを取るラムダ関数の引数である(つまり、DRだ)とマーク列の整数値を返します。

このコードがなぜ機能するのかを理解したい場合は、LINQC# lambda expressionsを新しくする必要があります。

+0

私はforeachループでこのコードを使用する必要がありますか?このコードのdrは何ですか? –

+0

ああ、それは混乱している、私は少し編集します。 – zmbq

0

documentation of the expression syntaxには何の問題も記載されていませんが、ネストされた関数呼び出しは嫌です。

は私が...このような計算列に Convert()への呼び出しを抽出

static void Main(string[] args) 
{ 
    int[] data = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 
    DataTable dt = CreateDataTable(data); 
    int omarks = Convert.ToInt32(dt.Compute("Sum(MarksInt)", "")); 
    string text = omarks.ToString(); 

    Console.WriteLine(omarks == data.Sum()); 
} 

static DataTable CreateDataTable(IEnumerable<int> data) 
{ 
    DataTable table = new DataTable(); 

    table.Columns.Add("Marks", typeof(string)); 
    table.Columns.Add("MarksInt", typeof(int), "Convert(Marks, 'System.Int32')"); 

    foreach (int i in data) 
    { 
     DataRow row = table.NewRow(); 

     row["Marks"] = i.ToString(); 

     table.Rows.Add(row); 
    } 

    return table; 
} 

を試してみました...そして、それはExceptionを投げずに実行し、正しくtrueを出力します。

+0

あなたの方法を使用してベーコン、私はこれを処理する正しい方法のように見えない私のデータテーブルに余分な列名 "MarksInt"を追加する必要があります。私はついにこのように扱わなければなりませんでした。 int omarks = 0; foreachの(dt.RowsでのDataRow DR) {(DR [ "マーク"]。ToStringメソッド()!= "A"){ omarks = omarks + int.Parse(DR [ "マーク"]場合のToString ()); } } tbobtained.Text = omarks.ToString(); –

+0

私は 'Convert()'と 'Sum() 'の呼び出しが何らかの理由で1つの式で結合されているのではないことを実証するだけで、これを実際の解決策として提案していませんでした。 – BACON

+0

ベーコン私はあなたから別の質問をしたいと思っています。 –

関連する問題