none
类似DataTable 的select方法 RRS feed

  • 问题

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

    public static DataRow[] Select(DataRow[] rows, string filter)
    //filter格式与select方法的参数类似
            { 
                ?
            }

    Rocky Yang

    2013年2月22日 7:55

答案

  • 既然多次筛选,为何不尝试这个

    直接传送DataTable,然后过滤字符串可以组合整个传入。

    class Program
        {
            static DataRow[] Filter(DataTable dt,string filter)
            {
                return dt.Select(filter);
            }
            static void Main(string[] args)
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("Id"typeof(int));
                for (int i = 1i < 11i++)
                {
                    dt.Rows.Add(i);
                }
                var result = Filter(dt"Id>2 And Id<8");
                foreach (var item in result)
                {
                    Console.WriteLine(item[0]);
                }
            }
     
        }

    帮助一起改进论坛质量?提交你的意见于此。
    我的博客园
    慈善点击,点击此处
    和谐拯救危机,全集下载,净化人心

    2013年2月22日 8:28
    版主

全部回复

  • 既然多次筛选,为何不尝试这个

    直接传送DataTable,然后过滤字符串可以组合整个传入。

    class Program
        {
            static DataRow[] Filter(DataTable dt,string filter)
            {
                return dt.Select(filter);
            }
            static void Main(string[] args)
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("Id"typeof(int));
                for (int i = 1i < 11i++)
                {
                    dt.Rows.Add(i);
                }
                var result = Filter(dt"Id>2 And Id<8");
                foreach (var item in result)
                {
                    Console.WriteLine(item[0]);
                }
            }
     
        }

    帮助一起改进论坛质量?提交你的意见于此。
    我的博客园
    慈善点击,点击此处
    和谐拯救危机,全集下载,净化人心

    2013年2月22日 8:28
    版主
  • 你实在要,可以这样:

    class Program
        {
            static DataTable ds = new DataTable();
     
            static DataRow[] Filter(DataRow[] rows,string filter)
            {
                DataTable dt = ds.Clone();
                dt.Clear();
                
                //导入原先的行
                foreach (var item in rows)
                {
                    dt.ImportRow(item);
                }
                return dt.Select(filter);
            }
            static void Main(string[] args)
            {
     
                ds.Columns.Add("Id"typeof(int));
                for (int i = 1i < 11i++)
                {
                    ds.Rows.Add(i);
                }
                var result = ds.Select("Id>2");
                result = Filter(result"Id<9");
     
                foreach (var item in result)
                {
                    Console.WriteLine(item[0]);
                }
            }
        }

    帮助一起改进论坛质量?提交你的意见于此。
    我的博客园
    慈善点击,点击此处
    和谐拯救危机,全集下载,净化人心

    2013年2月22日 8:34
    版主
  • 高手您好,我的DataTable需要通过嵌套循环多次筛选,每次筛选的数据需要经过一定计算,然后保存在DataRow中,循环结束后再通过DataTable保存此数据,您所提供的方法我也曾经尝试过,筛选数据是没有问题,可是我计算的结果最后在DataTable中是获取不到的,其实我也想过最后再通过与DataTable对比后将值写入DataTable,但我认为这样做太繁琐了,所以想请教一下有没有比较优雅点的方法.


    Rocky Yang

    2013年2月23日 1:55
  • 那你完全可以参考第一种方法——

    直接把嵌套复杂的过滤语句通过循环+if的形式拼接,然后直接使用DataTable的Select(或者使用DataView的RowFilter属性设置+ToTable输出结果)。


    帮助一起改进论坛质量?提交你的意见于此。
    我的博客园
    慈善点击,点击此处
    和谐拯救危机,全集下载,净化人心

    2013年2月23日 2:56
    版主