您的位置:首页 > 编程语言 > C#

[转]Datatable的Select方法简介

2013-08-30 17:31 316 查看
DataTable是我们在进行开发时经常用到的一个类,并且经常需要对DataTable中的数据进行筛选等操作,下面就介绍一下Datatable中经常用到的一个方法——Select,微软提供了四个函数的重载,分别是

 

Select()

Select(string filterExpression)

Select(string filterExpression,string sort)

Select(string filterExpression,stringsort,DataViewRowState record States)。

 

1)  Select()——获取所有 System.Data.DataRow 对象的数组。

2)  Select(string filterExpression)——按照主键顺序(如果没有主键,则按照添加顺序)获取与筛选条件相匹配的所有 System.Data.DataRow 对象的数组。

3)  Select(string filterExpression,string sort)——获取按照指定的排序顺序且与筛选条件相匹配的所有 System.Data.DataRow 对象的数组。

4)  Select(string filterExpression,string sort,DataViewRowState recordStates)——获取与排序顺序中的筛选器以及指定的状态相匹配的所有 System.Data.DataRow 对象的数组。

 

下面是对这些方法进行演示的示例:

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
 
namespace TestDataTableSelect
{
    classProgram
    {
        staticDataTable dt =newDataTable();
        staticvoid Main(string[] args)
        {         
           
DataColumn dc1 = new
DataColumn("id");
            dc1.DataType=typeof(int);
           
DataColumn dc2 = new
DataColumn("name");
            dc2.DataType=typeof(System.String);
            dt.Columns.Add(dc1);
            dt.Columns.Add(dc2);
           
for (int i = 1; i <=10;i++ )
            {
               
DataRow dr = dt.NewRow();
               
if (i <= 5)
                {
                    dr[0] = i;
                    dr[1] = i +
"--" + "hello";
                }
               
else
                {
                    dr[0] = i;
                    dr[1] = i +
"--" + "nihao";
                }
                dt.Rows.Add(dr);
            }
 
           
Select();
           
Select("id>='3' and name='3--hello'");//支持and
      
     Select("id>='3' or id='1'");//支持or
           Select("name like '%hello%'");//支持like   
           
Select("id>5","id desc"); //sort的关键字 ASC - 升序 DESC -降序
           
Select("id>5", "id desc",DataViewRowState.Added);
        }
 
        privatestaticvoid Select()
        {
           
DataRow[] arrayDR = dt.Select();
           
foreach(DataRow dr
in arrayDR)
            {
               
Console.WriteLine(dr[0].ToString()+"   
"+dr[1].ToString());
            }
           
Console.ReadLine();
        }
 
        privatestaticvoid Select(string filterExpression)
        {
           
DataRow[] arrayDR = dt.Select(filterExpression);
           
foreach (DataRow dr
in arrayDR)
            {
               
Console.WriteLine(dr[0].ToString() + "   
" + dr[1].ToString());
            }
           
Console.ReadLine();
        }
 
        privatestaticvoid Select(string filterExpression,string
sort)
        {
           
DataRow[] arrayDR = dt.Select(filterExpression,sort);
           
foreach (DataRow dr
in arrayDR)
            {
               
Console.WriteLine(dr[0].ToString() + "   
" + dr[1].ToString());
            }
           
Console.ReadLine();
        }
 
        privatestaticvoid Select(string filterExpression,string
sort,DataViewRowState recordStates)
        {
           
DataRow[] arrayDR = dt.Select(filterExpression, sort,recordStates);
           
foreach (DataRow dr
in arrayDR)
            {
               
Console.WriteLine(dr[0].ToString() + "   
" + dr[1].ToString());
            }
           
Console.ReadLine();
        }
    }
}
 注意事项:上面的Select操作是大小写不敏感的(记录的字段不敏感),如果需要区分大小写,需要将DataTable的caseSensitive属性设为true。

-----------------------------------------------------------------------------------------------------------------------------------------------

DataTable获取某一列的最大值  

1.datatable.compute("max(列名)","")
2.Column.Expression     =     "max(数据列名)";   

3.用视图来排序   

       Dim     firstView     As     DataView   

       Dim     maxvalue     as     string   

       firstView     =     dt.DefaultView   

       firstView.Sort     =     "数据列名     DESC"   

       maxvalue     =     firstView.Item(0).Item(0)   
4.tbl.Select("", "columnName Asc")(0)(columnName)
---------------------------------------------------------------------------------------
使用心得:
在datable中记录数较多,如20W条,使用多条件进行select则效率低下。
解决办法是通过过滤条件建立视图或者业务逻辑拆分多个表。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C# DataTable Select