代码
public void Test()
{
#region 初始化数据
/* 数据 张三 语文 34.00 张三 数学 58.00 张三 英语 61.00 李四 语文 45.00 李四 数学 87.00 李四 英语 74.00 王五 语文 68.50 王六 数学 83.50 宋王 数学 75.50 */ DataTable resultDt = new DataTable(); resultDt.Columns.AddRange(new DataColumn[] { new DataColumn("name", typeof(string)), new DataColumn("subject", typeof(string)), new DataColumn("score", typeof(double)) }); DataRow row1 = resultDt.NewRow(); row1.ItemArray = new object[] { "张三", "语文", 34.00 }; resultDt.Rows.Add(row1); DataRow row2 = resultDt.NewRow(); row2.ItemArray = new object[] { "张三", "数学", 58.00 }; resultDt.Rows.Add(row2); DataRow row3 = resultDt.NewRow(); row3.ItemArray = new object[] { "张三", "英语", 61.00 }; resultDt.Rows.Add(row3); DataRow row4 = resultDt.NewRow(); row4.ItemArray = new object[] { "李四", "语文", 45.00 }; resultDt.Rows.Add(row4); DataRow row5 = resultDt.NewRow(); row5.ItemArray = new object[] { "李四", "数学", 87.00 }; resultDt.Rows.Add(row5); DataRow row6 = resultDt.NewRow(); row6.ItemArray = new object[] { "李四", "英语", 74.00 }; resultDt.Rows.Add(row6); DataRow row7 = resultDt.NewRow(); row7.ItemArray = new object[] { "王五", "语文", 68.50 }; resultDt.Rows.Add(row7); DataRow row8 = resultDt.NewRow(); row8.ItemArray = new object[] { "王六", "数学", 83.50 }; resultDt.Rows.Add(row8); DataRow row9 = resultDt.NewRow(); row9.ItemArray = new object[] { "宋王", "数学", 75.50 }; resultDt.Rows.Add(row9); #endregion #region 定义中间表,将数据转移,所有值类型都为字符串 // score分数值类型为double,不能使用like,只能用数字之间的比较方式,如:>、<、>=、<=、= // 如果要使用like来查询score,则需要将score转换为字符串,当做字符串来进行查询,所以定义中间表 DataTable dataTable = new DataTable(); foreach (DataColumn item in resultDt.Columns) { DataColumn column = new DataColumn(item.ColumnName, typeof(string)); dataTable.Columns.Add(column); } foreach (DataRow item in resultDt.Rows) { List<string> values = new List<string>(); foreach (object value in item.ItemArray) { if (value != null) values.Add(Convert.ToString(value)); else values.Add(""); } DataRow row = dataTable.NewRow(); row.ItemArray = values.ToArray(); dataTable.Rows.Add(row); } #endregion string nameEqualSql = "`name` = '张三'";//等于 string nameNotEqualSql = "`name` <> '张三'";//不等于 string nameLikeSql = "`name` like '%王%'";//模糊匹配 string nameBeginWithSql = "`name` like '王%'";//以它开头 string nameEndWithSql = "`name` like '%六'";//以它结尾 string scoreBeginWithSql = "`score` like '6%'";//以它开头 //等于 - 张三 DataTable result1 = dataTable.Select(nameEqualSql).CopyToDataTable(); // result1: // 张三 语文 34.00 // 张三 数学 58.00 // 张三 英语 61.00 //不等于 - 张三 DataTable result2 = dataTable.Select(nameNotEqualSql).CopyToDataTable(); // result2: // 李四 语文 45.00 // 李四 数学 87.00 // 李四 英语 74.00 // 王五 语文 68.50 // 王六 数学 83.50 // 宋王 数学 75.50 //模糊匹配 - 王 DataTable result3 = dataTable.Select(nameLikeSql).CopyToDataTable(); // result3: // 王五 语文 68.50 // 王六 数学 83.50 // 宋王 数学 75.50 //以它开头 - 王 DataTable result4 = dataTable.Select(nameBeginWithSql).CopyToDataTable(); // result4: // 王五 语文 68.50 // 王六 数学 83.50 //以它结尾 - 六 DataTable result5 = dataTable.Select(nameEndWithSql).CopyToDataTable();