/// <summary> Execute native query and convert results. /// Multi-threaded result convertion /// </summary> /// <typeparam name="TRes">query results item data type</typeparam> /// <param name="queryString">native query text</param> /// <param name="setParamsMethod">quert parameters setter delegate</param> /// <param name="convertMethod">query result converter delegate</param> /// <param name="maxThreads">max number of threads for async convert query results (don't use less then 2)</param> /// <returns>converted native query result</returns> /// <exception cref="ArgumentNullException"> /// <paramref name="queryString"/> is null. /// <paramref name="convertMethod"/> is null. /// </exception> /// <exception cref="ArgumentOutOfRangeException"> /// <paramref name="maxThreads"/> has not supported value. /// </exception> /// <remarks> /// Try to use HQL, Linq-To-NHibernate and other ORM services and tools. /// </remarks> protected IList <TRes> ExecuteNativeQuery <TRes>(string queryString, SetQueryParameters setParamsMethod , ConvertData <TRes> convertMethod, ushort maxThreads) where TRes : T { if (string.IsNullOrEmpty(queryString)) { throw new ArgumentNullException("queryString"); } if (null == convertMethod) { throw new ArgumentNullException("convertMethod"); } if (1 == maxThreads) { //I18N throw new ArgumentOutOfRangeException("maxThreads", maxThreads, "Don't use 1(one) for maxThreads parameter. It's not make sence"); } IQuery q = this.Session.CreateSQLQuery(queryString); if (null != setParamsMethod) { q = setParamsMethod.Invoke(q); } var resList = q.List(); object[] data; List <TRes> res = new List <TRes>(resList.Count); foreach (var item in resList) { data = (object[])item; //TODO: implement multi-threaded results convertion res.Add(convertMethod.Invoke(data)); } return(res); }
/// <summary> Execute native query and convert results. /// Convert results in main thread /// </summary> /// <typeparam name="TRes">query results item data type</typeparam> /// <param name="queryString">native query text</param> /// <param name="setParamsMethod">quert parameters setter delegate</param> /// <param name="convertMethod">query result converter delegate</param> /// <returns>converted native query result</returns> /// <exception cref="ArgumentNullException"> /// <paramref name="queryString"/> is null. /// <paramref name="convertMethod"/> is null. /// </exception> /// <remarks> /// Try to use HQL, Linq-To-NHibernate and other ORM services and tools /// </remarks> protected IList <TRes> ExecuteNativeQuery <TRes>(string queryString, SetQueryParameters setParamsMethod , ConvertData <TRes> convertMethod) where TRes : T { return(ExecuteNativeQuery <TRes>(queryString, setParamsMethod, convertMethod, 0)); }