Xử lý dữ liệu với DataTable trong C#

Xử lý dữ liệu với DataTable trong C# như tính tổng, min, max, duyệt từng dòng, lọc dữ liệu, loại bỏ dòng trùng lặp …
Khóa học lập trình c# cực hay và hiệu quả:

[toc /]

Lọc dữ liệu của DataTable trong C# (Select)

using System;
using System.Data;

class Program
{
    static void Main()
    {
	// Tạo bảng lưu mức lương và giới tính của nhân viên
	DataTable table = new DataTable("Employees");
	table.Columns.Add(new DataColumn("Salary", typeof(int)));
	table.Columns.Add(new DataColumn("Sex", typeof(char)));

	table.Rows.Add(100, 'f');
	table.Rows.Add(235, 'f');
	table.Rows.Add(250, 'm');
	table.Rows.Add(310, 'm');
	table.Rows.Add(150, 'm');

	// Lấy danh sách nhân viên có giới tính là m (nam) và lương >= 230$
	DataRow[] result = table.Select("Salary>= 230 AND Sex = 'm'");
	foreach (DataRow row in result)
	{
	    Console.WriteLine("{0}, {1}", row[0], row[1]);
	}
    }
}

Duyệt từng dòng và từng cột của DataTable trong C#

using System;
using System.Data;

class Program
{
    static void Main()
    {
	DataTable table = GetTable(); 
	foreach (DataRow row in table.Rows) // Duyệt từng dòng (DataRow) trong DataTable
	{
	    Console.WriteLine("--- Row ---");  
	    foreach (var item in row.ItemArray) // Duyệt từng cột của dòng hiện tại
	    {
		Console.Write("Item: "); 
		Console.WriteLine(item); // In ra giá trị của ô với dòng và cột tương ứng
	    }
	}
	Console.Read(); // Pause.
    }

    //Hàm khởi tạo 1 DataTble
    static DataTable GetTable()
    {
	DataTable table = new DataTable(); // Tạo 1 datatable
	// Khởi tạo các cột
        table.Columns.Add("Dosage", typeof(int)); 
	table.Columns.Add("Drug", typeof(string));
	table.Columns.Add("Patient", typeof(string));
	table.Columns.Add("Date", typeof(DateTime));
        // Thêm 5 dòng dữ liệu vào bảng
	table.Rows.Add(15, "Abilify", "Jacob", DateTime.Now); 
	table.Rows.Add(40, "Accupril", "Emma", DateTime.Now);
	table.Rows.Add(40, "Accutane", "Michael", DateTime.Now);
	table.Rows.Add(20, "Aciphex", "Ethan", DateTime.Now);
	table.Rows.Add(45, "Actos", "Emily", DateTime.Now);
	return table; 
    }
}

Các hàm tính toán cơ bản của DataTable trong C#

Ví dụ này sẽ tính ra mức lương cao nhất, thấp nhất, lương trung bình, tổng lương của toàn bộ nhân viên trong công ty

DataTable dt = new DataTable();
dt.TableName = "Employees";
dt.Columns.Add("Name",typeof(string));
dt.Columns.Add("Salary",typeof(int));

dt.Rows.Add("Arnold", 1500);
dt.Rows.Add("Leo", 1700);
dt.Rows.Add("Sara", 1000);
dt.Rows.Add("John", 1400);
dt.Rows.Add("Mary", 1800);
dt.Rows.Add("Johny", 2100);
dt.Rows.Add("Peter", 1750);

//Lương Cao nhất
object MaxSalary;
MaxSalary= dt.Compute("Max(Salary)", "");
MessageBox.Show("Max Salary is : " + MaxSalary.ToString())

//Lương Thấp nhất
object MinSalary;
MinSalary= dt.Compute("Min(Salary)", "");
MessageBox.Show("Min Salary is : " + MinSalary.ToString())

//Lương trung bình
object AvgSalary;
AvgSalary= dt.Compute("Avg(Salary)", "");
MessageBox.Show("Average Salary is : " + AvgSalary.ToString());

//Tổng Lương
object SumSalary;
SumSalary= dt.Compute("Sum(Salary)", "");
MessageBox.Show("Total Salary is : " + SumSalary.ToString())

Tính tổng theo nhóm dạng Group By như SQL:

Cần chuyển Datatable thành dạng IEnumerable và sử dụng LINQ để truy vấn

using System;
using System.Data;
using System.Linq;

class Program
{
static void Main(string[] args)
{
DataTable table = new DataTable();
table.Columns.Add("Id", typeof(int));
table.Columns.Add("Value", typeof(decimal));
table.Rows.Add(123, 4);
table.Rows.Add(123, 5);
table.Rows.Add(234, 1);
table.Rows.Add(345, 2);
table.Rows.Add(345, 3);

var query = from row in table.AsEnumerable()
group row by row.Field<int>("Id") into grp
orderby grp.Key
select new
{
Id = grp.Key,
Sum = grp.Sum(r =r.Field<decimal>("Value"))
};

foreach (var grp in query)
{
Console.WriteLine("{0}\t{1}", grp.Id, grp.Sum);
}
}
}

Loại bỏ các dòng trùng lặp của DataTable trong C# (giống Distinct trong SQL)

Giả sử bạn có 1 bảng có 2 cột là id và value, bạn muốn lấy ra danh sách (một DataTable mới) sau khi đã loại bỏ các dòng trùng lặp theo cả 2 cột

DataTable uniqueCols = dt.DefaultView.ToTable(true, "id", "value");

 

Bài viết liên quan

Theo dõi
Thông báo của
guest

0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận
0
Rất thích suy nghĩ của bạn, hãy bình luận.x