Windows Phone Mango本地数据库(SQL CE)#2:Linq to SQL
这是WindowsPhone Mango本地数据库(SQL CE)系列文章的第二篇文章,这篇文章将会讲解Windows Phone 7.1 Mango本地数据库中的Linq to SQL。什么是Linqto SQL?
Linq to SQL是一种O/RM(对象关系映射)框架,他来自于.NET框架中的一部分。它可以使我们将业务对象(model class)映射到数据库表中,然后访问/查询本地数据库数据不需要写任何SQL代码。随着Mango的升级,Linq to SQL已经可以在Windows Phone手机中使用了。
使用Linq to SQL你可以:
[*]映射业务对象到数据库表中。
[*]使用Linq查询数据库。
[*]使用Linq to SQL APIs向数据库插入数据。
[*]使用Linq to SQL APIs向数据库更新数据。
[*]使用Linq to SQL APIs向数据库删除数据。
然而Windows Phone所支持的大多Linq to SQL特性是有限制的。你可以参考MSDN文档中的介绍:WindowsPhone 支持的Linq to SQL。以下列出部分内容:
[*]不支持ExecuteCommand :Windows Phone不支持执行原生Transact-SQL, Data Definition Language (DDL), 或 Data Modeling Language (DML) 声明.
[*]不支持ADO.NET 对象(比如 DataReader) :所有来自Linq to SQL所查询的数据都以一个有明确类型的集合对象形式进行返回。
[*]只支持微软的SQL Server Compact Edition (SQL CE) 数据类型:SQL CE对于本地数据库来说是一个非常基础的数据库技术。要查看所有SQL CE数据类型列表请参照:DataTypes(SQL Server Compact)。
[*]不支持Table.IListSource.GetList方法:要绑定表中所有内容,需查询整张表及绑定查询结果。通过业务逻辑来处理插入和删除。
[*]不支持BinaryFormatter :要将自定义类型转化为SQL Server Binary或VarBinary 数据类型,你的data cotext属性可以实现一个Linq to SQL 自定义类型或是byte[]类型或System.Data.Linq.Binary。要实现Linq to SQL自定义类型,首先要创建一个自定义类,该类实现了ToString()和Parse()方法。然后使用这个类作为你的Data Context中的一个属性。Linq to SQL可以将自定义类型映射到任意SQL Server字符串类型之上,比如Char,NChar,NChar,NVarChar,Text和ML.
[*]在Linq查询中Take()需要一个常量:SQL CE不支持Transact-SQL TOP声明中使用的查询数据。如果你想在Take方法中使用一个变量值,可以在另一个不同的查询方法中计算得出。
[*]Skip和Take方法需要一个有序列表清单:这些方法取决于一致性的返回结果。
它是如何工作的?
总之,Linq是一组扩展方法的集合,他们可以通过C#在本地数据库中完成数据查询或VB所使用的特殊语法。查询语法都是一些速记符号用来表示标准的Linq查询操作。下面是一些基本知识点:
[*]通常Linq to SQL查询语句以“from”语句开始,以“select”语句结束。
[*]“from”语句表示你想查询什么样的数据(通常是你是从集合/datacontext中进行查询)
[*]”select”语句表明你想返回什么样的数据,在这里你可以对其进行格式化。
[*]不管在任何地方你想对数据进行过滤操作都可以使用“where”语句。
[*]要完成排序可以使用”orderby”语句。
注意:Linqto SQL所完成的所有过滤和排序操作都是在数据库层,这使得它非常高效。要完成这些操作,你可以在C#中写入Linq查询,他会自动转化成SQL,然后在SQL运行库中执行。因此在你进行查询时可以使用下面这条语句:
1
varquery = from p incontext.Persons where p.Age > 18 select p;
他会在执行前通过Linq to SQL运行库自动转化成如下SQL查询语句:
1
2
3
SELECT., ., ., .
FROM. AS
WHERE. > @p0
注意:更多有关Linq的语法,你可以参考官方的说明文档:LINQ:.NET Language-Integrated Query。
希望这篇文章对你学习Linq有所帮助。
页:
[1]