/// <summary> /// 设置指定的查询语句并返回当前语句 /// </summary> /// <param name="command">选择语句</param> /// <param name="type">主题类型</param> /// <param name="relativeID">相关ID</param> /// <param name="includeHide">是否包含隐藏主题</param> /// <returns>当前语句</returns> internal static SelectCommand Where(this SelectCommand command, ForumTopicType type, Int32 relativeID, Boolean includeHide) { SqlConditionBuilder c = command.ConditionBuilder; AbstractSqlCondition condition = command.WhereCondition as AbstractSqlCondition; AbstractSqlCondition temp = null; //不包含隐藏 if (!includeHide) { temp = c.Equal(ForumTopicRepository.ISHIDE, false); condition = (condition == null ? temp : condition & temp); } if (type == ForumTopicType.Default) //普通讨论板中包括题目专属讨论板的帖子 { temp = c.LessThan(ForumTopicRepository.TYPE, (Byte)ForumTopicType.Contest); //普通0,题目1,竞赛2 condition = (condition == null ? temp : condition & temp); } else//竞赛或题目专属讨论板只有专属帖子 { temp = c.Equal(ForumTopicRepository.TYPE, (Byte)type) & c.Equal(ForumTopicRepository.RELATIVEID, relativeID); condition = (condition == null ? temp : condition & temp); } return(command.Where(condition)); }
/// <summary> /// 设置指定的查询语句并返回当前语句 /// </summary> /// <param name="command">选择语句</param> /// <param name="topics">主题列表</param> /// <param name="includeHide">是否包含隐藏主题</param> /// <returns>当前语句</returns> internal static SelectCommand Where(this SelectCommand command, IList <ForumTopicEntity> topics, Boolean includeHide) { SqlConditionBuilder c = command.ConditionBuilder; AbstractSqlCondition condition = command.WhereCondition as AbstractSqlCondition; AbstractSqlCondition temp = null; if (!includeHide) { temp = c.Equal(ForumPostRepository.ISHIDE, false); condition = (condition == null ? temp : condition & temp); } if (topics != null) { temp = c.In <Int32>(ForumPostRepository.TOPICID, () => { List <Int32> ids = new List <Int32>(); for (Int32 i = 0; i < topics.Count; i++) { ids.Add(topics[i].TopicID); } return(ids); }); condition = (condition == null ? temp : condition & temp); } return(command.Where(condition)); }
/// <summary> /// 设置指定的查询语句并返回当前语句 /// </summary> /// <param name="command">相关语句</param> /// <param name="cid">竞赛ID</param> /// <param name="pid">题目ID</param> /// <param name="userName">用户名</param> /// <param name="languageType">提交语言</param> /// <param name="resultType">提交结果</param> /// <returns>当前语句</returns> internal static SelectCommand Where(this SelectCommand command, Int32 cid, Int32 pid, String userName, LanguageType languageType, ResultType?resultType) { SqlConditionBuilder c = command.ConditionBuilder; AbstractSqlCondition condition = command.WhereCondition as AbstractSqlCondition; AbstractSqlCondition temp = null; //竞赛ID,非竞赛为-1 if (cid >= 0) { temp = c.Equal(SolutionRepository.CONTESTID, cid); condition = (condition == null ? temp : condition & temp); } //题目ID,如果为竞赛从竞赛题目顺序查找,否则从题目ID查找 if (pid >= 0) { temp = c.Equal((cid >= 0 ? SolutionRepository.CONTESTPROBLEMID : SolutionRepository.PROBLEMID), pid); condition = (condition == null ? temp : condition & temp); } //用户名 if (!String.IsNullOrEmpty(userName)) { temp = c.Equal(SolutionRepository.USERNAME, userName); condition = (condition == null ? temp : condition & temp); } //提交程序语言 if (!LanguageType.IsNull(languageType)) { temp = c.Equal(SolutionRepository.LANGUAGE, languageType.ID); condition = (condition == null ? temp : condition & temp); } //提交结果 if (resultType.HasValue) { temp = c.Equal(SolutionRepository.RESULT, (Byte)resultType.Value); condition = (condition == null ? temp : condition & temp); } return(command.Where(condition)); }
/// <summary> /// 设置指定的查询语句并返回当前语句 /// </summary> /// <param name="command">选择语句</param> /// <param name="fpids">帖子ID列表</param> /// <param name="ftids">主题ID列表</param> /// <param name="userName">发帖用户名</param> /// <param name="title">帖子标题</param> /// <param name="content">帖子内容</param> /// <param name="isHide">是否隐藏</param> /// <param name="startDate">发帖开始时间</param> /// <param name="endDate">发帖结束时间</param> /// <param name="postip">发帖IP</param> /// <returns>当前语句</returns> internal static SelectCommand Where(this SelectCommand command, String fpids, String ftids, String userName, String title, String content, Boolean?isHide, DateTime?startDate, DateTime?endDate, String postip) { SqlConditionBuilder c = command.ConditionBuilder; AbstractSqlCondition condition = command.WhereCondition as AbstractSqlCondition; AbstractSqlCondition temp = null; //帖子ID if (!String.IsNullOrEmpty(fpids)) { temp = c.InInt32(ForumPostRepository.POSTID, fpids, ','); condition = (condition == null ? temp : condition & temp); } //主题ID if (!String.IsNullOrEmpty(ftids)) { temp = c.InInt32(ForumPostRepository.TOPICID, ftids, ','); condition = (condition == null ? temp : condition & temp); } //用户名 if (!String.IsNullOrEmpty(userName)) { temp = c.LikeAll(ForumPostRepository.USERNAME, userName); condition = (condition == null ? temp : condition & temp); } //帖子标题 if (!String.IsNullOrEmpty(title)) { temp = c.LikeAll(ForumPostRepository.TITLE, title); condition = (condition == null ? temp : condition & temp); } //帖子内容 if (!String.IsNullOrEmpty(content)) { temp = c.LikeAll(ForumPostRepository.CONTENT, content); condition = (condition == null ? temp : condition & temp); } //是否隐藏 if (isHide.HasValue) { temp = c.Equal(ForumPostRepository.ISHIDE, isHide.Value); condition = (condition == null ? temp : condition & temp); } //发布日期范围 if (startDate.HasValue || endDate.HasValue) { temp = c.BetweenNullable <DateTime>(ForumPostRepository.POSTDATE, startDate, endDate); condition = (condition == null ? temp : condition & temp); } //发布IP if (!String.IsNullOrEmpty(postip)) { temp = c.LikeAll(ForumPostRepository.POSTIP, postip); condition = (condition == null ? temp : condition & temp); } return(command.Where(condition)); }
/// <summary> /// 设置指定的查询语句并返回当前语句 /// </summary> /// <param name="command">选择语句</param> /// <param name="names">用户名包含</param> /// <param name="nickname">昵称包含</param> /// <param name="email">邮箱包含</param> /// <param name="school">学校包含</param> /// <param name="lastIP">最后登录IP</param> /// <param name="islocked">是否锁定</param> /// <param name="regStartDate">注册日期开始</param> /// <param name="regEndDate">注册日期结束</param> /// <param name="loginStartDate">最后登录日期开始</param> /// <param name="loginEndDate">最后登录日期结束</param> /// <returns>当前语句</returns> internal static SelectCommand Where(this SelectCommand command, String names, String nickname, String email, String school, String lastIP, Boolean?islocked, DateTime?regStartDate, DateTime?regEndDate, DateTime?loginStartDate, DateTime?loginEndDate) { SqlConditionBuilder c = command.ConditionBuilder; AbstractSqlCondition condition = command.WhereCondition as AbstractSqlCondition; AbstractSqlCondition temp = null; //用户名列表模糊 if (!String.IsNullOrEmpty(names)) { String[] arrnames = names.Split(','); AbstractSqlCondition innertemp = null; temp = null; for (Int32 i = 0; i < arrnames.Length; i++) { if (!String.IsNullOrEmpty(arrnames[i])) { innertemp = c.LikeAll(UserRepository.USERNAME, arrnames[i]); temp = (temp == null ? innertemp : innertemp | temp); } } condition = (condition == null ? temp : condition & temp); } //昵称模糊 if (!String.IsNullOrEmpty(nickname)) { temp = c.LikeAll(UserRepository.NICKNAME, nickname); condition = (condition == null ? temp : condition & temp); } //邮箱模糊 if (!String.IsNullOrEmpty(email)) { temp = c.LikeAll(UserRepository.EMAIL, email); condition = (condition == null ? temp : condition & temp); } //学校模糊 if (!String.IsNullOrEmpty(school)) { temp = c.LikeAll(UserRepository.SCHOOL, school); condition = (condition == null ? temp : condition & temp); } //最后登录IP模糊 if (!String.IsNullOrEmpty(lastIP)) { temp = c.LikeAll(UserRepository.LASTIP, lastIP); condition = (condition == null ? temp : condition & temp); } //是否锁定 if (islocked.HasValue) { temp = c.Equal(UserRepository.ISLOCKED, islocked.Value); condition = (condition == null ? temp : condition & temp); } //注册日期范围 if (regStartDate.HasValue || regEndDate.HasValue) { temp = c.BetweenNullable <DateTime>(UserRepository.CREATEDATE, regStartDate, regEndDate); condition = (condition == null ? temp : condition & temp); } //登陆日期范围 if (loginStartDate.HasValue || loginEndDate.HasValue) { temp = c.BetweenNullable <DateTime>(UserRepository.LASTDATE, loginStartDate, loginEndDate); condition = (condition == null ? temp : condition & temp); } return(command.Where(condition)); }
/// <summary> /// 设置指定的查询语句并返回当前语句 /// </summary> /// <param name="command">选择语句</param> /// <param name="ftids">主题ID列表</param> /// <param name="userName">发帖人</param> /// <param name="title">主题标题</param> /// <param name="type">主题类型</param> /// <param name="relativeID">相关ID</param> /// <param name="isLocked">是否锁定</param> /// <param name="isHide">是否隐藏</param> /// <param name="startDate">发帖开始时间</param> /// <param name="endDate">发帖结束时间</param> /// <returns>当前语句</returns> internal static SelectCommand Where(this SelectCommand command, String ftids, String userName, String title, ForumTopicType?type, Int32 relativeID, Boolean?isLocked, Boolean?isHide, DateTime?startDate, DateTime?endDate) { SqlConditionBuilder c = command.ConditionBuilder; AbstractSqlCondition condition = command.WhereCondition as AbstractSqlCondition; AbstractSqlCondition temp = null; //主题ID if (!String.IsNullOrEmpty(ftids)) { temp = c.InInt32(ForumTopicRepository.TOPICID, ftids, ','); condition = (condition == null ? temp : condition & temp); } //用户名 if (!String.IsNullOrEmpty(userName)) { temp = c.LikeAll(ForumTopicRepository.USERNAME, userName); condition = (condition == null ? temp : condition & temp); } //主题标题 if (!String.IsNullOrEmpty(title)) { temp = c.LikeAll(ForumTopicRepository.TITLE, title); condition = (condition == null ? temp : condition & temp); } //主题类型 if (type.HasValue) { temp = c.Equal(ForumTopicRepository.TYPE, (Byte)type.Value); condition = (condition == null ? temp : condition & temp); } //相关ID if (relativeID >= 0) { temp = c.Equal(ForumTopicRepository.RELATIVEID, relativeID); condition = (condition == null ? temp : condition & temp); } //是否锁定 if (isLocked.HasValue) { temp = c.Equal(ForumTopicRepository.ISLOCKED, isLocked.Value); condition = (condition == null ? temp : condition & temp); } //是否隐藏 if (isHide.HasValue) { temp = c.Equal(ForumTopicRepository.ISHIDE, isHide.Value); condition = (condition == null ? temp : condition & temp); } //发布日期范围 if (startDate.HasValue || endDate.HasValue) { temp = c.BetweenNullable <DateTime>(ForumTopicRepository.LASTDATE, startDate, endDate); condition = (condition == null ? temp : condition & temp); } return(command.Where(condition)); }
/// <summary> /// 设置指定查询的语句并返回当前语句 /// </summary> /// <typeparam name="T">实体类类型</typeparam> /// <param name="cmd">选择语句</param> /// <param name="expr">Linq表达式</param> /// <exception cref="LinqNotSupportedException">Linq操作不支持</exception> /// <returns>当前语句</returns> /// <example> /// <code lang="C#"> /// <![CDATA[ /// public class UserRepository : DatabaseTable<User> /// { /// //other necessary code /// /// public User GetEntity(Int32 userID) /// { /// return this.Select() /// .Querys<User>(c => new { c.UserID, c.UserName }) /// .Where<User>(c => c.UserID == userID) /// .ToEntity<User>(this) > 0; /// /// //SELECT UserID, UserName From tbl_Users WHERE UserID = @UserID /// //@UserID = userID /// } /// } /// ]]> /// </code> /// </example> public static SelectCommand Where <T>(this SelectCommand cmd, Expression <Func <T, Boolean> > expr) { return(cmd.Where(SqlLinqCondition.Create <T>(cmd, expr))); }