C# DataTable查询示例

代码

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:
    //      王六 数学 83.50

    //以它开头 - 6
    DataTable result6 = dataTable.Select(scoreBeginWithSql).CopyToDataTable();
    // result6:
    //      张三 英语 61.00
    //      王五 语文 68.50

    Console.WriteLine("---End---");
}

 

posted @ 2020-08-17 15:46  jardeng  阅读(6303)  评论(0编辑  收藏  举报