代码
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();
//