淘先锋技术网

首页 1 2 3 4 5 6 7

.net Compact Framework 3.5中,新加入了对Linq的支持。CF中的Linq在功能是否有所删减呢?下面将详细叙述。

.net Framework 3.5中,Linq5个功能:
1Linq To Objects
(对对象)
2Linq To XML (对XML

3Linq To Entity
(对实体)
4Linq To SQL (对Sql
数据库)
5Linq To DataSet (对数据集)  

打开VS2008,创建一个SmartDevice工程。

上面的平台,我选择了
Windows Mobile 5.0,我没有安装别的SDK,可以通过安装各个平台的SDK,来扩展平台选择。  


在整个工程项目中,添加了几个
Form,来一一做说明。


1
Linq To Objects
是指直接针对任意枚举集合使用Linq查询,如List<T>Array等。该集合可以是用户自定义的,也可以是.net Framework API
返回的集合。
Linq To Objects是一种新的处理集合的方法。在原先的处理方式中,我们必须编写检索集合的复杂的foreach等循环处理。采用Linq后,只需要描述要检索的内容的声明性代码即可。  

Form_Load事件中,在ArrayList中添加Person,然后通过Menu中的Data Bind来过滤所需要的数据。
第一个ComboBox里,添加了Person名的长度= 4Person

第二个ComboBox里,添加了Person> E Person


代码如下:
 

Code
 1        private void LinqToObjectForm_Load(object sender, EventArgs e)
 2        {
 3            lstPerson = new ArrayList();
 4
 5            lstPerson.Add("Peter");
 6            lstPerson.Add("John");
 7            lstPerson.Add("Gordon");
 8            lstPerson.Add("Kevin");
 9            lstPerson.Add("Robin");
10            lstPerson.Add("Dalls");
11            lstPerson.Add("Rickie");
12            lstPerson.Add("Shadow");
13            lstPerson.Add("Cindy");
14            lstPerson.Add("Eric");
15            lstPerson.Add("Jack");
16        }

17
18        private void menuItem2_Click(object sender, EventArgs e)
19        {
20            var query = from string person in lstPerson
21                        where person.Length == 4
22                        orderby person
23                        select person;
24
25            foreach (string person in query)
26            {
27                //System.Diagnostics.Debug.WriteLine(person);
28                this.comboBox1.Items.Add(person);
29            }

30
31            query = from string person in lstPerson
32                    where person.ToUpper().CompareTo("F"> 0
33                    orderby person
34                    select person;
35
36            foreach (string person in query)
37            {
38                this.comboBox2.Items.Add(person);
39            }

40        }

 

2Linq To XML
Linq To XMLXML的一种编程方法,提供文档对象模型(DOM)的内存文档修改功能,支持Linq查询表达式。这些表达式在语法上与XPath不同,但它们可以以更加类型化的方法提供类似的功能。
 
Linq To XML支持对XML的创建、序列化XML、查询、修改等功呢,在此,我只做了查询XML
树中符合条件的节点。
点击MenuData Bind,查询PurchaseOrder.xml中属性为Billing的节点,并输出到TextBox中。该xml采用微软提供的采购单的xml
文档。
使用Linq To XML必须引用System.Xml.Linq命名空间。  


代码如下:
Linq To Entity
很遗憾,在.net CF中暂不支持。  

Code
1            XElement root = XElement.Load(@"PurchaseOrder.xml");
2            IEnumerable<XElement> address = from el in root.Elements("Address")
3                                            where (string)el.Attribute("Type"== "Billing"
4                                            select el;
5
6            foreach (XElement el in address)
7            {
8                this.textBox1.Text += el;
9            }



3

4Linq To Sql
Linq To Sql中,关系型数据库的数据模型映射到开发人员的实际的编程语言所表示的对象模型中。当程序运行过程中,Linq To Sql会将对象模型中的语言集成查询转换成SQL语句,然后到数据库里执行。数据库执行完毕后,返回结果,Linq To Sql会将它们再转换成编程语言所对应的对象。  

Linq To Sql支持对数据库的添、删、改、查基本操作。
很遗憾,在实际开发过程中,也不支持。  

5Linq To DataSet
DataSet是使用广泛的ADO.NET组件之一,可以将查询到数据集存放到DataSet中,作为缓存数据来使用。虽然DataSet功能强大,但其查询也存在限制。Linq To DataSet可以更快更容易地查询在DataSet对象中的数据。  

Form里,点击MenuData Bind,在TextBox中输出的是User_NameGordon的那条数据。


代码如下:
首先,要添加System.Data.DataSetExtensions的引用。然后添加一个数据库。我这里为了方便使用,添加了一个对应的DataSet

填充DataTable,在查询时,将DataTable作为枚举,且字段查询时,要进行类型转换,最后select结果时,可以指定输出的强命名(作为属性)存储在query中。

Code
 1        private void menuItem4_Click(object sender, EventArgs e)
 2        {
 3            AppDatabase1DataSet.Sys_UserDataTable table = new AppDatabase1DataSet.Sys_UserDataTable();
 4
 5            AppDatabase1DataSetTableAdapters.Sys_UserTableAdapter adapt = new SmartDeviceLinqDemo.AppDatabase1DataSetTableAdapters.Sys_UserTableAdapter();
 6
 7            adapt.Fill(table);
 8
 9            var query = from user in table.AsEnumerable()
10                        where user.Field<string>("User_Name"== "Gordon"
11                        select new 
12                            SysNo = user.Field<int>("SysNo"), 
13                            User_Id = user.Field<string>("User_Id"), 
14                            User_Name = user.Field<string>("User_Name"), 
15                            Mail = user.Field<string>("Mail")}
;
16
17            foreach (var user in query)
18            {
19                this.textBox1.Text += string.Format("SysNo = {0}, User_ID = {1}, User_Name = {2}, Mail = {3}", user.SysNo, user.User_Id, user.User_Name, user.Mail);
20            }

21        }


至此.net CF中对Linq的介绍已经结束了。Linq的出现大大方便了开发人员,Linq提供了很多的功能还有待大家去深入研究。