0

「給与」列を合計しようとしています。以下は私のテーブルです。

public static void dataTable()
{
DataTable table = GetTable();
}
static DataTable table;
public static DataTable GetTable()
{
table = new DataTable();
table.Columns.Add("player", typeof(string));
table.Columns.Add("age", typeof(double));
table.Columns.Add("position", typeof(stats.pos));
table.Columns.Add("ovalue", typeof(double));
table.Columns.Add("dvalue", typeof(double));
table.Columns.Add("team", typeof(stats.team));
table.Columns.Add("salary", typeof(int));
table.Columns.Add("contractYears", typeof(int));
table.Columns.Add("active", typeof(bool));

table.Rows.Add("AG", 24, stats.pos.SP, 0, 4.2, stats.team.S, 1, 5, true);
table.Rows.Add("AR", 30, stats.pos.SP, 0, 2.6, stats.team.S, 7, 2, true);
table.Rows.Add("JK", 22, stats.pos.SP, 0, 3.2, stats.team.S, 1, 6, true);
}
public class stats
{
public enum pos { fiB, seB, SS, thB, OF, C, DH, SP, RP };
public enum team { S };
}

給与列を追加する私の試みは次のとおりです。

try
{
    object sumobject = (object)table.Compute("Sum(salary)", "active=true");
    double sumdouble = Convert.ToDouble(sumobject);
    payrollLabel.Text = Convert.ToString(sumdouble);
}
catch
{ 
    MessageBox.Show("Error in payroll");
}          

ただし、コードは常にキャッチにスキップします。列に NULL 値があると表示されますが、何も入力していません。どんな助けでも大歓迎です。

4

3 に答える 3

2

LINQ を使用して単純化できます。

int としてのフィールド:

var salarySum = table.AsEnumerable().Sum(x => x.Field<int>("salary"));    

ダブルとして:

var salarySum = table.AsEnumerable().Sum(x => x.Field<double>("salary"));
于 2013-08-06T18:23:14.817 に答える
1

stats.pos または stats.team の値と関係があると確信しています。参照を削除しましたが、問題なく動作します。統計オブジェクトには何がありますか?

待って...テーブルにアクセスする前にテーブルを初期化していますか?

于 2013-08-06T18:41:02.530 に答える
1

あなたはこれを行うことができます

yourtable.AsEnumerable().Sum(datarow => datarow.Field<int>("salary"));
于 2013-08-06T18:22:56.740 に答える