当前位置: 首页 > news >正文

平湖市建设局网站/西安seo顾问公司

平湖市建设局网站,西安seo顾问公司,越秀网站建设推广,阿里巴巴做网站Gadgets 是我单独写的一个简单的ORM数据持久层,由于能力有限,功能并不强大,不过还算能满足我现在的需求。随之日后需求的更改,我也会慢慢给Gadgets添加功能,以及完成目前部分不足之处。好了,不废话了&#…

Gadgets 是我单独写的一个简单的ORM数据持久层,由于能力有限,功能并不强大,不过还算能满足我现在的需求。随之日后需求的更改,我也会慢慢给Gadgets添加功能,以及完成目前部分不足之处。好了,不废话了,进入正题。

Gadgets 用的是类似LINQ的方式去实现,例如:

ContractedBlock.gifExpandedBlockStart.gifView Code
 1 GadgetsSelect<User> gadgets = new GadgetsSelect<User>();
2 gadgets.Select(u => new { u.UserId, u.UserName }).Where(u => u.UserId < 10);
3 DataSet ds = gadgets.GetDataSet();
4 Console.ReadLine();
5
6
7 [Table(TableName="T_User")]
8 public class User:GadgetsEntityBase
9 {
10 [Field(FieldName = "F_UserId", TableName = "T_User",SqlDbType=SqlDbType.Int,IsPrimaryKey=true)]
11 public Int32 UserId { get; set; }
12 [Field(FieldName = "F_UserName", TableName = "T_User", SqlDbType = SqlDbType.NVarChar)]
13 public string UserName { get; set; }
14 }
15 [Table(TableName = "T_Admin")]
16 public class Admin : GadgetsEntityBase
17 {
18 [Field(FieldName = "F_AdminId", TableName = "T_Admin", SqlDbType = SqlDbType.Int, IsPrimaryKey = true)]
19 public Int32 AdminId { get; set; }
20 [Field(FieldName = "F_AdminName", TableName = "T_Admin", SqlDbType = SqlDbType.NVarChar)]
21 public string AdminName { get; set; }
22 [Field(FieldName = "F_UserId", TableName = "T_User", SqlDbType = SqlDbType.Int,IsForeignKey=true)]
23 public int UserId { get; set; }
24 }

其中 User,Admin为实体类,

gadgets.Select(u => new { u.UserId, u.UserName }).Where(u => u.UserId < 10);

这段代码将生成一条SQL,生成的结果是:

 SELECT  [T_User].[F_UserId],[T_User].[F_UserName] FROM [T_User] WHERE [T_User].[F_UserId]<'10'

GetDataSet是将生成的SQL语句执行,并返回一个一个DataSet,里面还支持返回一个List<object> object对象则就是你进行查询后生成的一个匿名类。

例如上面的查询语句,返回的是F_UserId,F_UserName 2列数据,那么object对象则就是一个含有F_UserId,F_UserName作为属性的一个匿名类型,例如:

一些开发中经常用到的功能,例如,skip功能,select top count 这样的分页查询方式

ContractedBlock.gifExpandedBlockStart.gifView Code
1 GadgetsSelect<User> gadgets = new GadgetsSelect<User>();
2 gadgets.Select(u => new { u.UserId, u.UserName }).CharIndex(u => u.UserName == "D").Skip(1, u => u.UserId > 2, false)
3 .Where(u => u.UserId >2);

生成的SQL语句是:

1  SELECT  [T_User].[F_UserId],[T_User].[F_UserName] FROM [T_User] 
WHERE [T_User].[F_UserId] NOT IN (
SELECT TOP 1 [T_User].[F_UserId] FROM T_User WHERE [T_User].[F_UserId]>'2' )
AND [T_User].[F_UserId]>'2' AND CHARINDEX('D',[T_User].[F_UserName])>0

前面说的都是写简单例子,目前支持多表查询,JOIN等等一些经常用到的功能。

部分我尚为经常用到的功能,我就还没有去实现,例如,事物。不过,我会慢慢添加进去。

好了,基本演示代码已经写完了,接下来,说的是,我是如何完成的吧。

首先,从实体类开始讲起,实体类上面打了很多我自定义特征,为的是在反射的过程中可以获取部分我需要的数据,例如表名称,字段名称等等。

1 [Table(TableName="T_User")]
2 public class User:GadgetsEntityBase
3 {
4 [Field(FieldName = "F_UserId", TableName = "T_User",SqlDbType=SqlDbType.Int,IsPrimaryKey=true)]
5 public Int32 UserId { get; set; }
6 [Field(FieldName = "F_UserName", TableName = "T_User", SqlDbType = SqlDbType.NVarChar)]
7 public string UserName { get; set; }
8 }

GadgetsEntityBase 是那些需要进行反射的实体类的基类,换句话说,没有继承该基类,则无法对该对象进行操作。

Table,Field是我自定义的特征,没什么好说的。重点在于

public Int32 UserId { get; set; } 这里的Int32  int 跟Int32 在我们认识的范畴里面,其实是一样的。但是,这真是我目前的一点点小缺陷,由于我在将SqlDbType.Int转换为C#对于的类型过程中,他
是直接转为Int32 而int跟Int32却不是相同的。所以,例如,你将Int32改成int,在生成SQL语句的时候,就会报错或者直接忽略该属性。不过,我会在后面慢慢修改过来。

在Select的过程中,你只需要传入一条lambda表达式,然后我就可以根据表达式进行查询你需求的数据。但是目前支持
select(()=>new{})用new的方式传入一个匿名对象,部分功能可以支持传入select(u=>u)这个参数对象。后面将会慢慢扩展开来。
值得一提的是,我使用了自定义缓存,在反射,序列化XML等操作上,性能是比较客观的。部分代码是参考老赵而来,他的文章也给了我不少提示,在此谢谢他。
接下来我也不知道说写什么,现在就直接贴源码,有兴趣的朋友可以下载去看看。有什么高见,我有什么地方写的不好,麻烦大家指出来哦。

下载地址:http://files.cnblogs.com/suguicheng/2011-7-28.rar

转载于:https://www.cnblogs.com/suguicheng/archive/2011/08/18/2144319.html

http://www.lbrq.cn/news/955513.html

相关文章:

  • 网站设计标题/百度搜索热度排名
  • 武汉网站制作027/天津seo渠道代理
  • 广州网站建设制作公司/百度快速收录权限
  • 最出名的网站建设公司/网站之家
  • tomcat做公司网站/百度指数查询网
  • 临沂广润网站建设/店铺推广软文范例
  • 文化传播做网站推广吗/青岛排名推广
  • 网站页面制作软件/苹果cms播放器
  • 网站提示页面设计/如何进行线上推广
  • 2345浏览器主页/找索引擎seo
  • 广州珠江工程建设监理有限公司网站/谷歌优化
  • 软件开发可行性研究报告/福州seo公司排名
  • 做国外网站推广/制作网站的软件有哪些
  • 福州网站制作建设/如何推广一个新的app
  • 网站建设开发公司/百度旅游官网
  • 外包加工网手工活/aso优化服务
  • 建设电商网站/如何注册一个网站
  • 后台网站如何建设/软文是什么样子的
  • 建设一个收入支出持平的网站/hao123主页
  • 做网站订金为什么需要交那么多/在线推广企业网站的方法有
  • 南阳市做网站/友情链接交易网
  • 枞阳县建设局网站/手机百度账号登录个人中心
  • thinkphp可以做网站吗/长沙seo网络优化
  • 上海网站设计服务商/网店运营培训
  • 网站可以自己做吗/百度销售系统登录
  • 长沙百度开户/优化服务内容
  • 兴义市建设局网站/关键词歌词含义
  • 360云盘做 网站图片服务器/地产渠道12种拓客方式
  • 建设了网站怎么管理系统/广东省各城市疫情搜索高峰进度
  • 广东官方网站建设/googleplay安卓版下载
  • Web服务压力测试工具hey学习一:使用方法
  • 20250720-6-Kubernetes 调度-nodeName字段,DaemonS_笔记
  • 模型自信度提升:增强输出技巧
  • 子线程不能直接 new Handler(),而主线程可以
  • GaussDB union 的用法
  • 基于Qwen2.5-3B-Instruct的LoRA微调与推理实战指南