/// <summary> /// 使用指定的查询对象查询题目句柄。 /// </summary> /// <param name="query">为查询提供参数。</param> /// <returns>一个列表,该列表中包含了所有的查询结果。</returns> /// <exception cref="ArgumentNullException"/> /// <exception cref="ArgumentOutOfRangeException"/> public IList <ProblemHandle> QueryProblems(ProblemArchieveQueryParameter query) { if (query == null) { throw new ArgumentNullException(nameof(query)); } if (query.QueryByTitle && query.Title == null) { throw new ArgumentNullException(nameof(query.Title)); } if (query.QueryBySource && query.Source == null) { throw new ArgumentNullException(nameof(query.Source)); } if (query.QueryByAuthor && query.Author == null) { throw new ArgumentNullException(nameof(query.Author)); } if (query.Page == null) { throw new ArgumentNullException(nameof(query.Page)); } if (query.Page.Page <= 0 || query.Page.EntriesPerPage <= 0) { throw new ArgumentOutOfRangeException(nameof(query.Page)); } IQueryable <ProblemEntity> set = m_context.GetAllProblemEntities(); // 根据查询参数执行相应的查询,动态维护查询基础数据集。 if (query.QueryByTitle) { set = ProblemArchieveDataContext.QueryProblemEntitiesByTitle(set, query.Title); } if (query.QueryBySource) { set = ProblemArchieveDataContext.QueryProblemEntitiesBySource(set, query.Source); } if (query.QueryByAuthor) { set = ProblemArchieveDataContext.QueryProblemEntitiesByAuthor(set, query.Author); } // 执行分页。 set = set.Page(query.Page.Page, query.Page.EntriesPerPage); List <ProblemHandle> handleList = new List <ProblemHandle>(); foreach (ProblemEntity entity in set) { handleList.Add(ProblemHandle.FromProblemEntity(entity)); } return(handleList); }
private ProblemArchieveDataContext m_context; // 数据上下文 /// <summary> /// 初始化 ProblemArchieveManager 类的新实例。 /// </summary> private ProblemArchieveManager() { m_context = new ProblemArchieveDataContext(); }