您的位置:首页 > 其它

Subsonic的使用之基本语法、操作

2011-05-17 14:05 549 查看
这里简单介绍一下Subsonic的一些基本操作语法:如查询、新增、修改、删除操作等。

注:个人学习和使用总结,仅供参考,不足之处,敬请批评指证!以下的语句都是经过测试通过的!
查询:
可以使用new Select()….或DB.Select()的方式,个人习惯用DB,所以后面的其他操作都将使用“DB.”!

最简单的查询:
SqlQuery query = DB.Select().From(CyUser.Schema)
return query.ExecuteDataSet().Tables[0];

带查询条件:
SqlQuery query = DB.Select().From(CyUser.Schema)
.Where(CyUser.FDepartmentIDColumn).IsEqualTo(departmentId);
return query.ExecuteDataSet().Tables[0];

带查询条件、关联查询:
SqlQuery query = DB.Select(CyUser.Columns.FCalender, "Cy_Users.FID as FID", "Cy_Users.FName as FName", CyUser.Columns.FEmail, CyUser.Columns.FPhoneNumber, "Cy_Department.FName as DepartmentName", "CY_Duty.FName as DutyName")
.From(CyUser.Schema)
.Where(CyUser.FidColumn).IsEqualTo(id)
.LeftOuterJoin(CyDepartment.FidColumn, CyUser.FDepartmentIDColumn)
.LeftOuterJoin(CyDuty.FidColumn, CyUser.FDutyIDColumn);
return query.ExecuteDataSet().Tables[0];

带排序的查询:
SqlQuery query = DB.Select().From(CyUser.Schema)
.OrderAsc(CyUser.Columns.FUsersSort);

直接用Sql语句的查询(带参数):
string sql = string.Format(" Update [CY_Users] set[FLoginTimes] = [FLoginTimes]+1 where [FID]='{0}'", ID);
DB.Query().Execute(sql);

集合查询(参数ids是部门ID的集合):
SqlQuery query = DB.Select().From(CyUser.Schema)
.Where(CyUser.FDepartmentIDColumn).In(ids);
注:Subsonic生成的字段都是string类型的,所以假设传入的ids是string[]类型的在这都是正确的,尽管DepartmentID在数据库中定义为uniqueidentfier类型的,当然你也可以传入Guid[] ids,只不过系统会隐式地将ids中的每个部门ID转换为string类型的!

查询返回对象:
前面我们都能看到这样一个语句:return query.ExecuteDataSet().Tables[0];含义是将查询的记录集返回为DataTable对象。当然还可以返回其他的对象:
以下是常用的查询返回对象:
Ø  ExecuteReader():返回IDataReader对象
Ø  ExecuteDataSet():返回DataSet对象
Ø  ExecuteScalar():返回Object对象,返回查询记录集中的第一行第一列的值
Ø  ExecuteScalar<T>():返回范型对象如:ExecuteScalar<string>()
Ø  Execute():返回执行后,数据更新条数
Ø  ExecuteSingle<表实体>():返回表实体对象如:ExecuteSingle<Users>()
Ø  ExecuteTypedList<表实体>():返回范型表实体数据集

新增、修改:
Subsonic中的新增和修改可以共享一个方法(InsertOrUpdate):
user.InsertOrUpdate(); //其中user是传入的用户实体
return user.Fid;
当然它们也有自己独立的方法:
²  新增:
notice.Save();//其中notice是传入的公告实体
return NoticeId = notice.Fid;
²  修改
int i = new Update(CyReceiver.Schema)
.Set(CyReceiver.FStateColumn).EqualTo(1)
.Where(CyReceiver.FNoticeIDColumn).IsEqualTo(noticeId)
.And(CyReceiver.FUserIDColumn).IsEqualTo(userId).Execute();

删除:
DB.Delete().From(CyUser.Schema).Where(CyUser.FidColumn).IsEqualTo(id).Execute();

SQL关键词:
Select 、 Delete、 Insert、 Update、Form、 Where这些和SQL一样的就不解释了
IsEqualTo:where条件中的“等于”
如:Where(CyReceiver.FNoticeIDColumn).IsEqualTo(noticeId)
IsNotEqualTo: where条件中的“不等于”
EqualTo:set语句中的“等于”  如: Set(CyReceiver.FStateColumn).EqualTo(1)
IsGreaterThan :where中的“大于”
IsGreaterThanOrEqualTo:大于等于
IsLessThan:where中的“小于”
IsLessThan OrEqualTo:小于等于
IsBetweenAnd:区间
如:Where(CyNotice.FBeginDateTimeColumn).IsBetweenAnd(beginDate, endDate)
OrderAsc:按某字段升序排序  如:OrderAsc(CyUser.Columns.FUsersSort)
OrderDesc: 按某字段降序序排序
And:逻辑中的“且”
Or: 逻辑中的“或”
Like:模糊查询关键词
如:And(CyNotice.FTitleColumn).Like("%" + model.Title + "%")
更常用的是:title=string.Format("%{0}%", model.Title);
And(CyNotice.FTitleColumn).Like(title);
LeftOuterJoin:左外连接 (当然还有RightOuterJoin、Joins、LeftInnerJoin等等)
如:From(CyNotice.Schema)
.LeftOuterJoin(CyUser.FidColumn, CyNotice.FUserIDColumn)
Paged:分页
当然还有很多,这里就不列出了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: