代碼
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(); // result5: