linq 在Datatable中的使用

第一,linq取datatable某一列所有数据,我要返回给一个list<string>

       class ClientStruct
        {
            public string ID = "ID";
            public string Name = "Name";
            public string Company = "Company";
            public string CreatedDate = "CreatedDate";
        }

        public static string[,] infoArr = new string[,] { { "1", "百度", "baidu", "201303" }, { "2", "迅雷", "xunlei", "201302" }, { "3", "谷歌", "guge", "201301" } };
        protected static void LinqDataTable()
        {
            DataRow row;
            ClientStruct cs = new ClientStruct();
            DataTable dtTable = new DataTable();
            dtTable.Columns.Add(cs.ID);
            dtTable.Columns.Add(cs.Name);
            dtTable.Columns.Add(cs.Company);
            dtTable.Columns.Add(cs.CreatedDate);
            for (int i = 0; i < 3; i++)
            {
                row = dtTable.NewRow();
                row[cs.ID] = infoArr[i, 0];
                row[cs.Name] = infoArr[i, 1];
                row[cs.Company] = infoArr[i, 2];
                row[cs.CreatedDate] = infoArr[i, 3];
                dtTable.Rows.Add(row);
            }

            //获取单列的数据
           List <string> rr = dtTable.Select().Select(rw => rw["要转的列"].ToString()).ToList();
           var lstColumn = dtTable.AsEnumerable().Select<DataRow, string>(x => x["列名"].ToString()).ToList<string>();
           var _list = dtTable.AsEnumerable().Select(t => t.Field<string>("mtlPartNo")).ToList();
           List<string> _list1 = dtTable.AsEnumerable().Select(t => t.Field<string>("mtlPartNo")).ToList();
            //遍历DataTable,取出所有的ID
            List<string> lstID = (from d in dtTable.AsEnumerable()
                                  select d.Field<string>(cs.ID)).ToList<string>();

            //遍历DataTable,将其中的数据对应到ClientStruct中:
            List<ClientStruct> list = (from x in dtTable.AsEnumerable()
                                       orderby x.Field<string>(cs.Company)
                                       select new ClientStruct
                                       {
                                           ID = x.Field<string>(cs.ID),
                                           Name = x.Field<string>(cs.Name),
                                           Company = x.Field<string>(cs.Company),
                                           CreatedDate = x.Field<string>(cs.CreatedDate)
                                       }).ToList<ClientStruct>();

            //遍历DataTable,并将上面的List结果存储到Dictionary中:
            Dictionary<string, ClientStruct> dic = list.ToDictionary(p => p.Company);
            //p作为string键值来存储
        }


2.DataTable是我们在进行开发时经常用到的一个类,并且经常需要对DataTable中的数据进行筛选等操作,

下面就介绍一下Datatable中经常用到的一个方法——Select,微软提供了四个函数的重载,分别是

 
Select()
Select(string filterExpression)
Select(string filterExpression, string sort)
Select(string filterExpression,string sort, 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 对象的数组。

String的参数filterExpression是查询的限定式。相当于SQL查询语言中的WHERE语句(不含WHERE),其语法符合SQL语言语法。


1.在DataTable中执行DataTable.Select("条件")返回DataTable

DataRow[] drArr = dt.Select("C1=’abc’");//查询
DataRow[] drArr = dt.Select("C1 LIKE ’abc%’");//模糊查询 
DataRow[] drArr = dt.Select("’abc’ LIKE C1 + ’%’", "C2 DESC");//另一种模糊查询的方法 
DataRow[] drArr = dt.Select("C1=’abc’", "C2 DESC");//排序
DataRow[] drArr =   Detailtb.Select("WZMC='"+MaterialName+"' and   CZ='"+MaterialTexture+"   and   GG='"+MaterialSpecs+"'");//多字段过滤


DataTable dtNew = dt.Clone(); 
for (int i = 0; i < drArr.Length; i++) 
{ 
    dtNew.ImportRow(drArr[i]);
}
3.5里的DataRow[]有个扩展方法CopyToDataTable(), 还可以利用DataView来达到检索的目的。 

DataTable dataSource = new DataTable(); 
DataView dv = dataSource.DefaultView; 
dv.RowFilter = "columnA = 'abc'";

// 1.过滤后直接获取DataTable 
DataTable newTable1 =  dv.ToTable();

//2.设置新DataTable的TableName 
DataTable newTable2 = dv.ToTable("NewTableName"
);

//
3.设置新表是否过滤重复项,拥有的列的列名以及出现的顺序 
//即可以设置新表的字段。但是字段名肯定是老表dataSource中拥有的。 
DataTable newTable3 =
 
dv.ToTable(truenew string[] { "columnA,columnF,columnC"
 });

//4.综合了2.3两点。 
DataTable newTable4 =
 
dv.ToTable("NewTableName"truenew string[] { "columnA,columnF,columnC" });







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值