转自 [http://www.huiyaosoft.com/html/datatablelinqquery.htm](http://www.huiyaosoft.com/html/datatablelinqquery.htm)<br />本章节主要讲解DataTable的查询、统计汇总功能。
一、构造DataGridView
C# Code
region 构造DGV
- DataGridViewTextBoxColumn textCol = new DataGridViewTextBoxColumn();
- textCol.HeaderText = “Name”;
- textCol.Width = 100;
- textCol.DataPropertyName = “name”;
- this.dataGridView1.Columns.Add(textCol);
- textCol = new DataGridViewTextBoxColumn();
- textCol.HeaderText = “Quantity”;
- textCol.Width = 100;
- textCol.DataPropertyName = “quantity”;
- this.dataGridView1.Columns.Add(textCol);
endregion
构造DataTable,并给DataGridView赋值
C# Coderegion 构造数据表
- dt = new DataTable(“chart”);
- DataColumn col = new DataColumn();
- col.ColumnName = “name”;
- col.DataType = typeof(System.String);
- dt.Columns.Add(col);
- col = new DataColumn();
- col.ColumnName = “quantity”;
- col.DataType = typeof(System.Int32);
- dt.Columns.Add(col);
- Random rand = new Random();
- DataRow row = dt.NewRow();
- row[“name”] = “青岛”;
- row[“quantity”] = rand.Next(1,100);
- dt.Rows.Add(row);
- row = dt.NewRow();
- row[“name”] = “武汉”;
- row[“quantity”] = rand.Next(1, 100);
- dt.Rows.Add(row);
- row = dt.NewRow();
- row[“name”] = “武汉经济技术开发区”;
- row[“quantity”] = rand.Next(1, 100);
- dt.Rows.Add(row);
- row = dt.NewRow();
- row[“name”] = “武汉”;
- row[“quantity”] = rand.Next(1, 100);
- dt.Rows.Add(row);
- row = dt.NewRow();
- row[“name”] = “北京”;
- row[“quantity”] = rand.Next(1, 100);
- dt.Rows.Add(row);
- row = dt.NewRow();
- row[“name”] = “深圳”;
- row[“quantity”] = rand.Next(1, 100);
- dt.Rows.Add(row);
- row = dt.NewRow();
- row[“name”] = “上海”;
- row[“quantity”] = rand.Next(1, 100);
- dt.Rows.Add(row);
- row = dt.NewRow();
- row[“name”] = “广州”;
- row[“quantity”] = rand.Next(1, 100);
- dt.Rows.Add(row);
- row = dt.NewRow();
- row[“name”] = “成都”;
- row[“quantity”] = rand.Next(1, 100);
- dt.Rows.Add(row);
- row = dt.NewRow();
- row[“name”] = “重庆”;
- row[“quantity”] = rand.Next(1, 100);
- dt.Rows.Add(row);
- row = dt.NewRow();
- row[“name”] = “宁波”;
- row[“quantity”] = rand.Next(1, 100);
- dt.Rows.Add(row);
- row = dt.NewRow();
- row[“name”] = “南京”;
- row[“quantity”] = rand.Next(1, 100);
- dt.Rows.Add(row);
endregion
- this.dataGridView1.DataSource = dt;
DataTable Select查询
C# Code - DataRow[] drArr = dt.Select(“name=’武汉’”);
- DataTable dtNew = dt.Clone();
- for (int i = 0; i < drArr.Length; i++)
{
dtNew.Rows.Add(drArr[i].ItemArray);
}
this.dataGridView1.DataSource = dtNew;
二、DataTable Select 模糊查询
C# Code
DataRow[] drArr = dt.Select(“name like ‘%北京%’”);
- DataTable dtNew = dt.Clone();
- for (int i = 0; i < drArr.Length; i++)
{
dtNew.ImportRow(drArr[i]);
}
- this.dataGridView1.DataSource = dtNew;
DataTable 显示某个状态的记录行
C# Code - DataRow[] drArr = dt.Select(“name like ‘%%’”, “quantity”, DataViewRowState.Added);
- DataTable dtNew = dt.Clone();
- for (int i = 0; i < drArr.Length; i++)
{
dtNew.ImportRow(drArr[i]);
}
this.dataGridView1.DataSource = dtNew;
三、DataTable 多重条件查询,排序
C# Code
DataRow[] drArr = dt.Select(“name like ‘%%’ or (quantity > 10 and quantity < 50)”, “quantity desc”, DataViewRowState.Added);
- DataTable dtNew = dt.Clone();
- for (int i = 0; i < drArr.Length; i++)
{
dtNew.ImportRow(drArr[i]);
}
- this.dataGridView1.DataSource = dtNew;
DataTable Linq 查询
C# Code var query = from t in dt.AsEnumerable()
where t.Field<int>("quantity") > 50
orderby t.Field<int> ("quantity") descending
select new tt
{
Name = t.Field<string>("name"),
Quantity = t.Field<int>("quantity")
};
this.dataGridView1.DataSource = query.ToList();
C# Codevar query = from t in dt.AsEnumerable()
where t.Field<int>("quantity") > 50
orderby t.Field<int>("quantity") descending
select new
{
Name = t.Field<string>("name"),
Quantity = t.Field<int>("quantity")
};
this.dataGridView1.DataSource = query.ToList();
C# Codevar query = from t in dt.AsEnumerable()
//where t.Field<int>("quantity") > 10
orderby new { t1 = t.Field<string>("name"), t2 = t.Field<int>("quantity") } descending
select new tt
{
Name = t.Field<string>("name"),
Quantity = t.Field<int>("quantity")
};
this.dataGridView1.DataSource = query.Where(p => p.Quantity > 10).ToList();
四、DataTable Linq group by 查询
C# Code
var query = from t in dt.AsEnumerable()
group t by t.Field<string>("name") into m
select new
{
name = m.Key,
quantity = m.Sum(n => n.Field<int?>("quantity"))
};
this.dataGridView1.DataSource = query.ToList();
C# Codevar query = from t in dt.AsEnumerable()
group t by new { t1 = t.Field<string>("name"), t2 = t.Field<string>("name") } into m
select new
{
name = m.Key.t2,
quantity = m.Sum(n => n.Field<int?>("quantity"))
};
this.dataGridView1.DataSource = query.ToList();
五、DataTable Linq Max,Min,Sum,Avg计算
C# Code
decimal? query = (from t in dt.AsEnumerable()
select t.Field<decimal>("quantity")).Sum();
decimal? query = (from t in dt.AsEnumerable()
select t.Field<decimal>("quantity")).Max();
decimal? query = (from t in dt.AsEnumerable()
select t.Field<decimal>("quantity")).Min();
decimal? query = (from t in dt.AsEnumerable()
select t.Field<decimal>("quantity")).Count();
string exp = “name like ‘武汉%’”;
- Console.WriteLine(“max:{0},avg:{1},min:{2},count:{3}”
, dt.Compute("max(quantity)", exp).ToString()
, dt.Compute("avg(quantity)", exp).ToString()
, dt.Compute("min(quantity)", exp).ToString()
, dt.Compute("count(quantity)", exp).ToString());
六、DataTable Count,Sum,Avg,Min,Max计算
C# Code
- Console.WriteLine(“count:{0},sum:{1},avg:{2},min:{3},max:{4}”
, dt.Compute("count(name)", null).ToString()
, dt.Compute("sum(quantity)", null).ToString()
, dt.Compute("avg(quantity)", null).ToString()
, dt.Compute("min(quantity)", null).ToString()
, dt.Compute("max(quantity)", null).ToString());
七、DataTable Expression表达式,列之间可运算
C# Code
- DataColumn col = new DataColumn();
- col.ColumnName = “ll”;
- col.DataType = typeof(System.Int32);
- dt.Columns.Add(col);
- col.Expression = “len(name)”;
- this.dataGridView1.DataSource = dt;