当前位置: 代码迷 >> .NET新技术 >> 比LINQ简单:PDF.NET框架之OQL语言!解决方案
  详细解决方案

比LINQ简单:PDF.NET框架之OQL语言!解决方案

热度:98   发布时间:2016-04-25 01:46:02.0
比LINQ简单:PDF.NET框架之OQL语言!
LINQ很强大,但它要.NET3.0以上才支持,如果还在用VS2005的朋友就有点感叹了,为啥面向对象的方式写SQL的LINQ不能用?
如果你想了解LINQ的实现原理,不想自己实现一个LINQ试试看?
另外,如果你的客户之装了.NET2.0框架,不想装.NET3.5怎么办?

----------------------
基于这些问题,你有兴趣的可以看看 PDF.NET框架之OQL语言!

OQL:Object Query Language
[实体]对象查询语言

OQL作为PDF.NET框架的一部分,为整个框架基于实体的查询提供了强大的“查询语言表达式”!

下面举例介绍OQL的使用:
--------------------------
PDF.NET之实体查询


1.1.1.1 实体类
实体类都是继承自PDF.NET的Entity基类的类。
例如我们假设数据库中存在一个通过如下建表语句创建的表TB_User
SQL code
--用户类 表脚本创建 for SQL SERVERCreate Table TB_User(  ID int identity(1,1) primary key,  Name varchar(50) not null,  Birthday datetime);

 
然后,我们通过PDF.NET实体类生成器,生成一个实体类User ,如下图:

单击“另存为”按钮,将生成的实体类文件保存下来,然后打开该文件:
 
 
C# code
/* 本类由PWMIS 实体类生成工具(Ver 1.1)自动生成 http://www.pwmis.com/sqlmap 使用前请先在项目工程中引用 PWMIS.Core.dll 2010-2-26 17:45:06 */ using System;using PWMIS.DataMap.Entity; namespace MyNameSpace {  [Serializable()]  public partial class User : Entity  {    public User()    {            TableName = "tb_user";            //IdentityName = "标识字段名";         IdentityName="ID";             //PrimaryKeys.Add("主键字段名");         PrimaryKeys.Add("ID");                         AddProperty("ID", default(System.Int32));            AddProperty("Name", default(System.String));            AddProperty("Birthday", default(System.DateTime));    }        public System.Int32 ID      {          get{return (System.Int32)getProperty("ID");}          set{setProperty("ID",value );}      }       public System.String Name      {          get{return (System.String)getProperty("Name");}          set{setProperty("Name",value ,50);}      }       public System.DateTime Birthday      {          get{return (System.DateTime)getProperty("Birthday");}          set{setProperty("Birthday",value );}      }    }}
 
1.1.1.2 实体查询
在创建了上面的实体类以后,便可以使用EntityQuery<T> 进行实体查询,例如如下代码:
 
C# code
 Console.WriteLine("rn实体对象持久化测试:");             User zhang_san = new User();            //zhang_san.Uid = 5;            EntityQuery<User> query = new EntityQuery<User>(zhang_san,true );            zhang_san.Name = "张三1";            query.Save();// 新增            Console.WriteLine("新增实体对象OK");             zhang_san.Birthday = new DateTime (1977,3,10);            query.Save();// 修改            Console.WriteLine("修改实体对象OK");
 
注:EntityQuery<T>(T,true) 表示当前实体类的持久化方式为“新增”。
 
1.1.1.3 OQL实体查询语言
IN 查询
C# code
this.txtOQL.Text = "";             User u = new User();            OQL q = new OQL(u);            q.Select().Where(q.Condition.IN(u.Uid, new object []{1,3,5}));            this.txtOQL.Text += q.ToString()+"rn------------------rn";             q.Select().Where(q.Condition.IN(u.Name, new object[] { "张三","李四"}));            this.txtOQL.Text += q.ToString() + "rn------------------rn";

将输出:
SELECT * 
 FROM Tb_User
  Where id IN(1,3,5)
   
------------------
SELECT * 
 FROM Tb_User
  Where id IN(1,3,5) AND Name IN('张三','李四')
  相关解决方案