جمع کردن مقادیر یک ستون خاص در DataTable

فرض کنید در کد نویسی یک Datatable به صورت زیر تعریف می کنیم و 3 سطر را به آن اضافه می کنیم :

DataTable DataTable1 = new DataTable();

DataTable1.Columns.AddRange(new DataColumn[3] { new DataColumn("EmployeeId", typeof(int)),
						new DataColumn("Name"      , typeof(string)),
						new DataColumn("Salary"    , typeof(int)) });

DataTable1.Rows.Add(1, "John Hammond"    , 45000);
DataTable1.Rows.Add(2, "Mudassar Khan"   , 32000);
DataTable1.Rows.Add(3, "Robert Schidner" , 19000);

همانطور که در کد بالا مشاهده می کنید ابتدا یک شی Datatable ایجاد می کنیم . سپس با استفاده از متد ()AddRange خاصیت Columns تعداد 3 ستون که دارای مشخصات زیر هستند را به ان اضافه می کنید :

  • ستون اول دارای نام EmployeeId هست و از نوع int
  • ستون دوم دارای نام Name و از نوع string هست
  • و در اخر ستون سوم که دارای نام Salary و نوع int هست .

هم سه سطر را با استفاده از متد ()Add خاصیت Rows به ان اضافه می کنیم . دقت کنید که این Datatable را شبیه سازی کرده ایم . زیرا در برنامه های واقعی ممکن است که شما جدولی در بانک داشته باشید که دارای این ستون های باشد . زمانی که با استفاده از dataadapter داده ها را از بانک واکشی می کنید #C به صورت خودکار این ساختار را برای شما ایجاد می کند . کلاس DataTable یک متد به نام ()Compute دارد که دارای 2 پارامتر می باشد :

  • در پارامتر اول آن توابع تجمیعی مانند ()SUM() ، Count() ، MIN() ، Max() ، AVG ( میانگین ) قرار می گیرد .
  • در پارامتر دوم می توانید داده ها را فیلتر نمایید ( مانند دستور WHERE در SQL ) .

حال قصد داریم با استفاده از پارامتر اول مجموع ستون Salary ، Datatable ای که در قبل ساخته ایم را بدست آوریم :

int sum = Convert.ToInt32(DataTable1.Compute("SUM(Salary)", string.Empty));

در پارامتر اول مقدار (SUM(Salary را قرار داده ایم . این مقدار مشخص می کند که قصد داریم جمع مقادیر ستون Salary را بدست آوریم . چونکه نیازی به فیلتر کردن داده ها نداریم در پارامتر دوم مقدار string.Empty را قرار داده ایم . بدلیل اینکه قصد داریم نتیجه را در یک متغیر از نوع int قرار دهیم باید با استفاده از متد ToInt32 کلاس Convert نتیجه رو به نوع int تبدیل کنیم .

اگر قصد داشته باشید که جمع حقوق ( Salary ) کارمندانی که شناسه آنها ( EmployeeId ) از 2 بزرگتر است را بدست بیاورید می تونید از دستور زیر استفاده کنید :

int sum = Convert.ToInt32(DataTable1.Compute("SUM(Salary)", "EmployeeId > 2"));