/// <summary> /// 获取Pool预览列表 /// </summary> /// <param name="inputName">用户输入的名称</param> /// <param name="site">图站</param> /// <param name="column">按此列排序</param> /// <param name="ratingArray">分级</param> /// <returns></returns> public static DataTable SelectPoolPreviewList(string inputName, Site site, PoolOrderBy column, Rating[] ratingArray) { string selectColumns = string.Format("id,name,file_md5,{0}", column.ToString()); string ratingIN = string.Join(",", ratingArray.Select(s => string.Format("'{0}'", s.ToString().Substring(0, 1).ToLower()))); string commandText = string.Format("SELECT {0} FROM pools WHERE name LIKE ('%'||@inputName||'%') AND rating IN ({1})", selectColumns, ratingIN); SQLiteParameter param = new SQLiteParameter("@inputName", inputName); SQLiteCommand command = SQLiteHelper.CreateCommand(DBConn.GetConn(site), commandText, param); return(SQLiteHelper.ExecuteDataTable(command)); }
/// <summary> /// 获取Pool预览图 /// </summary> /// <param name="inputName">用户输入的名称</param> /// <param name="ratingArray">分级</param> /// <param name="preferArray">偏好</param> /// <param name="column">按此列排序</param> /// <param name="orderMode">排序模式</param> /// <param name="siteArray">图站</param> /// <returns></returns> public static List <PoolPreviewInfo> GetPoolPreview(string inputName, Rating[] ratingArray, Prefer[] preferArray, PoolOrderBy column, OrderMode orderMode, Site[] siteArray) { //多线程查询结果集 List <PoolPreviewInfo> result = new List <PoolPreviewInfo>(); //将参数打包 Dictionary <string, object>[] paramDicArray = new Dictionary <string, object> [siteArray.Length]; //根据查询图站数量创建线程 Task <List <PoolPreviewInfo> >[] tasks = new Task <List <PoolPreviewInfo> > [siteArray.Length]; for (int x = 0; x < siteArray.Length; x++) { paramDicArray[x] = new Dictionary <string, object>(); paramDicArray[x].Add("inputName", inputName); paramDicArray[x].Add("ratingArray", ratingArray); paramDicArray[x].Add("column", column); paramDicArray[x].Add("site", siteArray[x]); tasks[x] = new Task <List <PoolPreviewInfo> >(p => { Dictionary <string, object> pDic = (Dictionary <string, object>)p; return(GetOneSitePoolPreview((string)pDic["inputName"], (Site)pDic["site"], (PoolOrderBy)pDic["column"], (Rating[])pDic["ratingArray"])); }, paramDicArray[x]); } //开启多线程查询 foreach (var t in tasks) { t.Start(); } Task.WaitAll(tasks); //合并多线程结果集 foreach (var t in tasks) { result.AddRange(t.Result); } IEnumerable <PoolPreviewInfo> temp; //偏好 List <PoolPreviewInfo> preferList = Preference.GetPoolPrefer(preferArray); if (preferList == null || preferList.Count == 0) { temp = result; } else { //差集 if (preferArray.Contains(Prefer.Normal)) { temp = result.Except(preferList); } //交集 else { temp = result.Intersect(preferList); } } //排序 if (orderMode == OrderMode.ASC) { temp = temp.OrderBy(c => c.order_column); } else { temp = temp.OrderByDescending(c => c.order_column); } return(temp.ToList()); }
/// <summary> /// 获取单个图站Pool预览信息 /// </summary> /// <param name="inputName">用户输入的名称</param> /// <param name="site">图站</param> /// <param name="column">按此列排序</param> /// <param name="ratingArray">分级</param> /// <returns></returns> private static List <PoolPreviewInfo> GetOneSitePoolPreview(string inputName, Site site, PoolOrderBy column, Rating[] ratingArray) { DataTable dt = DAL.Pool.SelectPoolPreviewList(inputName, site, column, ratingArray); return(PoolPreviewInfo.Convert(dt, site)); }