OQL and O/R Mapping

思维 - 现实 - 思维

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

DLinq 无疑将成为今后数据库处理的利器之一,它具有语言无关、强类型、编译检查等优点。虽然 DLinq 自出现以来受到的褒贬不一,目前也只是支持 SQL Server,但这不是本文要讨论的话题。

 

DLinq 发布之前,然道我们依旧只能用字符串拼拼凑凑,来写那些难以维护的 SQL 语句?也许有人会说,用 O/R Mapping 吧。我们应该看到 O/R Mapping 并不是包治百病的良药,在处理复杂的查询时,O/R Mapping 就不合适了,这时大多数人的选择还是基于字符串的 SQL 语句。

 

现在,我们可以选择另一种查询方案—— OQL.NET

 

我们来看看下面的 SQL 语句:

select * from Customers c where c.City = 'London' order by c.ContactName

 

我们先来看看 DLinq 如何写:

var q =

        from c in Customers

        where c.City == "London"

orderby c.ContactName

        select c;

我们可以看到,采用 Lambda 表达式为基础的 DLinq 虽然是语言集成的,但它并不是嵌入式 SQLDLinq SQL 有着很大的差异,在写复杂的查询时更是如此,开发者需要进行一段时间学习才能很好地掌握它。

 

我们再来瞧瞧 OQL.NET 如何写:

SelectQuery q = OQL

.SelectFrom ( NW.Customer )

.Where ( NW.Customer.City == "London" )

.OrderBy ( NW.Customer.ContactName );

OQL.NET 采用级联表达式的方式对 SQL 进行了高度模仿,大大降低了学习成本和入门门槛,这种好处是不言而喻的。OQL.NET 的级联表达式是上下文关联的,比如 where 只能在from 之后,having 只能在 groupby 之后等等,这样的设计除了能在 IDE 中得到上下文帮助之外,还能引导初学者写出正确的查询语句。
posted on 2006-09-03 15:27  Kimphi  阅读(517)  评论(2编辑  收藏  举报