[c#基础]DataTable的Select方法

简介:

引言

可以说DataTable存放数据的一个离线数据库,将数据一下加载到内存,而DataReader是在线查询,而且只进形式的查询,如果后退一步,就不可能了,DataTable操作非常方便,但也有缺点,数据量非常大的时候,一下加载到内存,可想而知会有多么的卡了。这里只是说明DataTable的select()方法,具体项目根据需求,可以自己选择。

Select

既然DataTable是一下从数据库中拿数据,肯定提供了更方便的筛选方法,然后就找了一下,觉得Select能满足日常的筛选工作,做了一个小demo,测试了一下。

复制代码
 1 //
 2         // 摘要: 
 3         //     获取所有 System.Data.DataRow 对象的数组。
 4         //
 5         // 返回结果: 
 6         //     System.Data.DataRow 对象的数组。
 7         public DataRow[] Select();
 8         //
 9         // 摘要: 
10         //     获取按与筛选条件相匹配的所有 System.Data.DataRow 对象的数组。
11         //
12         // 参数: 
13         //   filterExpression:
14         //     要用来筛选行的条件。
15         //
16         // 返回结果: 
17         //     System.Data.DataRow 对象的数组。
18         public DataRow[] Select(string filterExpression);
19         //
20         // 摘要: 
21         //     获取按照指定的排序顺序且与筛选条件相匹配的所有 System.Data.DataRow 对象的数组。
22         //
23         // 参数: 
24         //   filterExpression:
25         //     要用来筛选行的条件。
26         //
27         //   sort:
28         //     一个字符串,它指定列和排序方向。
29         //
30         // 返回结果: 
31         //     与筛选表达式相匹配的 System.Data.DataRow 对象的数组。
32         public DataRow[] Select(string filterExpression, string sort);
33         //
34         // 摘要: 
35         //     获取与排序顺序中的筛选器以及指定的状态相匹配的所有 System.Data.DataRow 对象的数组。
36         //
37         // 参数: 
38         //   filterExpression:
39         //     要用来筛选行的条件。
40         //
41         //   sort:
42         //     一个字符串,它指定列和排序方向。
43         //
44         //   recordStates:
45         //     System.Data.DataViewRowState 值之一。
46         //
47         // 返回结果: 
48         //     System.Data.DataRow 对象的数组。
49         public DataRow[] Select(string filterExpression, string sort, DataViewRowState recordStates);
复制代码
复制代码
 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Data;
 5 using System.Drawing;
 6 using System.Linq;
 7 using System.Text;
 8 using System.Threading.Tasks;
 9 using System.Windows.Forms;
10 
11 namespace Wolfy.DatatableSelect
12 {
13     public partial class MainForm : Form
14     {
15         public MainForm()
16         {
17             InitializeComponent();
18         }
19         DataTable dt = null;
20         DataTable d = null;
21         private void btnSearch_Click(object sender, EventArgs e)
22         {
23             string where = string.Empty;
24             if (ckMan.Checked)
25             {
26                 where += "性别='男'";
27             }
28             else
29             {
30                 where = string.Empty;
31             }
32             if (ckCotainsW.Checked)
33             {
34                 where += ckMan.Checked ? " and 姓名 like '%w%'" : "姓名 like '%w%'";
35             }
36             
37             DataRow[] rows = dt.Select(where);
38             richTextResult.AppendText("编号\t姓名\t性别\t年龄\t\r\n");
39             for (int i = 0; i < rows.Length; i++)
40             {
41                 ShowSearchResult(rows[i]);
42             }
43 
44 
45 
46 
47         }
48         private void ShowSearchResult(DataRow row)
49         {
50             richTextResult.AppendText(string.Format("{0}\t{1}\t{2}\t{3}\t\r\n", row[0], row[1], row[2], row[3]));
51         }
52         private void MainForm_Load(object sender, EventArgs e)
53         {
54             dt = new DataTable();
55             DataColumn cell1 = new DataColumn("编号");
56             cell1.DataType = typeof(System.Int32);
57             DataColumn cell2 = new DataColumn("姓名");
58             cell2.DataType = typeof(System.String);
59             DataColumn cell3 = new DataColumn("性别");
60             cell3.DataType = typeof(System.String);
61             DataColumn cell4 = new DataColumn("年龄");
62             cell4.DataType = typeof(System.Int32);
63             dt.Columns.AddRange(new DataColumn[] { cell1, cell2, cell3, cell4 });
64 
65             Random ran = new Random();
66             string[] gender = { "", "", "保密" };
67             string[] names = { "韩梅梅", "wolfy", "小米", "w3w" };
68             for (int i = 0; i < 20; i++)
69             {
70                 int index = ran.Next(0, 3);
71                 DataRow row = dt.NewRow();
72                 row[0] = i;
73                 row[1] = names[ran.Next(0, 4)] + i.ToString();
74 
75                 row[2] = gender[index];
76                 row[3] = ran.Next(10, 50);
77                 dt.Rows.Add(row);
78             }
79             dgView.DataSource = dt;
80         }
81 
82 
83     }
84 }
复制代码

测试结果

总结

用select方法进行筛选还是非常方便的,以前的本方法就是遍历,然后将符合条件的数据取出,很麻烦。

博客地址: http://www.cnblogs.com/wolf-sun/
博客版权: 本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。
如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步!
再次感谢您耐心的读完本篇文章。

转载:http://www.cnblogs.com/wolf-sun/p/3560389.html
目录
相关文章
|
开发框架 .NET 程序员
C# 去掉字符串最后一个字符的 4 种方法
在实际业务中,我们经常会遇到在循环中拼接字符串的场景,循环结束之后拼接得到的字符串的最后一个字符往往需要去掉,看看 C# 提供了哪4种方法可以高效去掉字符串的最后一个字符
1117 0
|
编译器 C#
C#多态概述:通过继承实现的不同对象调用相同的方法,表现出不同的行为
C#多态概述:通过继承实现的不同对象调用相同的方法,表现出不同的行为
255 65
|
JSON 程序员 C#
使用 C# 比较两个对象是否相等的7个方法总结
比较对象是编程中的一项基本技能,在实际业务中经常碰到,比如在ERP系统中,企业的信息非常重要,每一次更新,都需要比较记录更新前后企业的信息,直接比较通常只能告诉我们它们是否指向同一个内存地址,那我们应该怎么办呢?分享 7 个方法给你!
457 2
|
C# UED SEO
C# 异步方法async / await任务超时处理
通过使用 `Task.WhenAny`和 `Task.Delay`方法,您可以在C#中有效地实现异步任务的超时处理机制。这种方法允许您在指定时间内等待任务完成,并在任务超时时采取适当的措施,如抛出异常或执行备用操作。希望本文提供的详细解释和代码示例能帮助您在实际项目中更好地处理异步任务超时问题,提升应用程序的可靠性和用户体验。
531 3
|
存储 C#
【C#】大批量判断文件是否存在的两种方法效率对比
【C#】大批量判断文件是否存在的两种方法效率对比
400 1
|
C#
C#的方法的参数传递
C#的方法的参数传递
176 0
|
数据可视化 程序员 C#
C#中windows应用窗体程序的输入输出方法实例
C#中windows应用窗体程序的输入输出方法实例
246 0
|
2月前
|
XML 前端开发 C#
C#编程实践:解析HTML文档并执行元素匹配
通过上述步骤,可以在C#中有效地解析HTML文档并执行元素匹配。HtmlAgilityPack提供了一个强大而灵活的工具集,可以处理各种HTML解析任务。
184 19
|
3月前
|
监控 算法 C#
C#与Halcon联合编程实现鼠标控制图像缩放、拖动及ROI绘制
C#与Halcon联合编程实现鼠标控制图像缩放、拖动及ROI绘制
548 0
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
254 3

热门文章

最新文章