积极答复者
类似DataTable 的select方法

问题
答案
-
既然多次筛选,为何不尝试这个
直接传送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 = 1; i < 11; i++) { dt.Rows.Add(i); } var result = Filter(dt, "Id>2 And Id<8"); foreach (var item in result) { Console.WriteLine(item[0]); } } }
- 已建议为答案 Mike FengModerator 2013年2月26日 8:34
- 已标记为答案 Mike FengModerator 2013年2月28日 13:56
全部回复
-
既然多次筛选,为何不尝试这个
直接传送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 = 1; i < 11; i++) { dt.Rows.Add(i); } var result = Filter(dt, "Id>2 And Id<8"); foreach (var item in result) { Console.WriteLine(item[0]); } } }
- 已建议为答案 Mike FengModerator 2013年2月26日 8:34
- 已标记为答案 Mike FengModerator 2013年2月28日 13:56
-
你实在要,可以这样:
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 = 1; i < 11; i++) { ds.Rows.Add(i); } var result = ds.Select("Id>2"); result = Filter(result, "Id<9"); foreach (var item in result) { Console.WriteLine(item[0]); } } }
-
那你完全可以参考第一种方法——
直接把嵌套复杂的过滤语句通过循环+if的形式拼接,然后直接使用DataTable的Select(或者使用DataView的RowFilter属性设置+ToTable输出结果)。