当前位置:编程学习 > C#/ASP.NET >>

求教:类似DataTable 的select方法

现在需要写一个方法,接收的参数是DataRow数组(通过datatable的select方法获取的),现要再写一个方法,从DataRow数组中再次进行筛选。因DataRow数组需要经过一定计算,在DataRow中存储数据,因此不能转换为DataTable,希望用类似DataTable的select方法实现,请高手赐教!

public static DataRow[] Select(DataRow[] rows, string filter)
//filter格式与select方法的参数类似
        { 
            ?
        } datatable select() --------------------编程问答-------------------- Linq提供了标准的Where、Select操作,没必要自己写一个。 --------------------编程问答-------------------- linq是挺方便的,为什么要自己去写呢
不是浪费精力吗? --------------------编程问答-------------------- 我写的是基于2.0的,linq还没研究过呢 --------------------编程问答--------------------
引用 1 楼 caozhy 的回复:
Linq提供了标准的Where、Select操作,没必要自己写一个。
基本上集合都可以使用linq筛选,自己写的话也是根据需求在封装一次而已。 --------------------编程问答--------------------
引用 3 楼 yangjiahui1hotmail 的回复:
我写的是基于2.0的,linq还没研究过呢

2.0下载LinqBridge。 --------------------编程问答-------------------- 不想用linq,那你就还是用DataTable吧。新建一个。
虽然笨了点。 --------------------编程问答-------------------- 绕开linq是个费脑子的事= =


using System.Collections;
using System.Data;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
        }

        public static DataRow[] Select(DataRow[] rows, string filter) //filter格式与select方法的参数类似
        {
            if (rows.Length == 0)
            {
                return new DataRow[0];
            }

            var dt = rows[0].Table.Clone();
            foreach (var item in rows)
            {
                dt.Rows.Add(item.ItemArray);
            }

            return dt.Select(filter);
        }

        public static DataRow[] Select2(DataRow[] rows, string filter) //再一种实现,先select再过滤
        {
            if (rows.Length == 0)
            {
                return new DataRow[0];
            }

            Hashtable htSource = new Hashtable(rows.Length), htResult = new Hashtable();
            foreach (var item in rows)
            {
                htSource[item] = null;
            }

            foreach (var item in rows[0].Table.Select(filter))
            {
                if (htSource.ContainsKey(item))
                {
                    htResult[item] = null;
                }
            }

            var result = new DataRow[htResult.Count];
            htResult.CopyTo(result, 0);
            return result;
        }
    }
}
--------------------编程问答-------------------- 不用linq,
只有把筛选出的数据行,再次装入datatable中,然后在select  --------------------编程问答-------------------- 楼主正解,我以前就是这么做的。 --------------------编程问答-------------------- 性能没什么影响的。楼主放心用把

补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,