这里简单介绍一下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:分页 当然还有很多,这里就不列出了!