Windows Phone Mango本地数据库(SQL CE)#2:Linq to SQL

这是Windows Phone Mango本地数据库(SQL CE)系列文章的第二篇文章,这篇文章将会讲解Windows Phone 7.1 Mango本地数据库中的Linq to SQL。

什么是Linq to 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文档中的介绍:Windows Phone 支持的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数据类型列表请参照:Data Types(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”语句。

注意:Linq to SQL所完成的所有过滤和排序操作都是在数据库层,这使得它非常高效。要完成这些操作,你可以在C#中写入Linq查询,他会自动转化成SQL,然后在SQL运行库中执行。因此在你进行查询时可以使用下面这条语句:

1
var query = from p in context.Persons where p.Age > 18 select p;

他会在执行前通过Linq to SQL运行库自动转化成如下SQL查询语句:

1
2
3
SELECT [t0].[ID], [t0].[FirstName], [t0].[LastName], [t0].[Age]
FROM [dbo].[People] AS [t0]
WHERE [t0].[Age] > @p0

注意:更多有关Linq的语法,你可以参考官方的说明文档:LINQ: .NET Language-Integrated Query

希望这篇文章对你学习Linq有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值