/// <summary> /// 条件筛选 例如:expression 为 it=>it.a inValues值为 new string[]{"a" ,"b"} 生成的SQL就是 a in('a','b') /// </summary> /// <typeparam name="T"></typeparam> /// <param name="queryable"></param> /// <param name="expression"></param> /// <returns></returns> public static SqlSugar.Queryable <T> In <T, FieldType>(this SqlSugar.Queryable <T> queryable, Expression <Func <T, object> > expression, List <FieldType> inValues) { ResolveExpress re = new ResolveExpress(); var InFieldName = re.GetExpressionRightFiled(expression); return(In <T, FieldType>(queryable, InFieldName, inValues)); }
/// <summary> /// 获取最小值 /// </summary> /// <typeparam name="TResult"></typeparam> /// <typeparam name="T"></typeparam> /// <param name="queryable"></param> /// <param name="minField">列</param> /// <returns></returns> public static object Min <T>(this SqlSugar.Queryable <T> queryable, Expression <Func <T, object> > expression) { ResolveExpress re = new ResolveExpress(); var minField = re.GetExpressionRightFiled(expression); return(Min <T, object>(queryable, minField)); }
/// <summary> /// 条件筛选 例如:InFieldName 为 a inValues 值为 new string[]{"a" ,"b"} 生成的SQL就是 a in('a','b') /// </summary> /// <typeparam name="T"></typeparam> /// <param name="queryable"></param> /// <param name="expression"></param> /// <returns></returns> public static SqlSugar.Queryable <T> In <T, FieldType>(this SqlSugar.Queryable <T> queryable, string InFieldName, params FieldType[] inValues) { var type = queryable.Type; ResolveExpress re = new ResolveExpress(); queryable.Where.Add(string.Format(" AND {0} IN ({1})", InFieldName, inValues.ToJoinSqlInVal())); return(queryable); }
/// <summary> /// 分组 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="queryable"></param> /// <param name="groupFileds">如:id,name </param> /// <returns></returns> public static SqlSugar.Queryable <T> GroupBy <T>(this SqlSugar.Queryable <T> queryable, Expression <Func <T, object> > expression) { ResolveExpress re = new ResolveExpress(); var field = re.GetExpressionRightFiled(expression); var pre = queryable.GroupBy.IsValuable() ? "," : ""; queryable.GroupBy += pre + field; return(queryable); }
/// <summary> /// 从起始点向后取指定条数的数据 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="queryable"></param> /// <param name="num"></param> /// <returns></returns> public static SqlSugar.Queryable <T> Take <T>(this SqlSugar.Queryable <T> queryable, int num) { if (queryable.OrderBy.IsNullOrEmpty()) { throw new Exception(".Take必需使用.OrderBy排序"); } queryable.Take = num; return(queryable); }
/// <summary> /// 跳过序列中指定数量的元素,然后返回剩余的元素。 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="queryable"></param> /// <param name="index"></param> /// <returns></returns> public static SqlSugar.Queryable <T> Skip <T>(this SqlSugar.Queryable <T> queryable, int index) { if (queryable.OrderBy.IsNullOrEmpty()) { throw new Exception(".Skip必需使用.Order排序"); } queryable.Skip = index; return(queryable); }
/// <summary> /// 将Queryable转换为DataTable /// </summary> /// <typeparam name="T"></typeparam> /// <param name="queryable"></param> /// <returns></returns> public static DataTable ToDataTable <T>(this SqlSugar.Queryable <T> queryable) { StringBuilder sbSql = SqlSugarTool.GetQueryableSql <T>(queryable); var dataTable = queryable.DB.GetDataTable(sbSql.ToString(), queryable.Params.ToArray()); queryable = null; sbSql = null; return(dataTable); }
/// <summary> /// 排序 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="queryable"></param> /// <param name="orderFileds">如:id asc,name desc </param> /// <returns></returns> public static SqlSugar.Queryable <T> OrderBy <T>(this SqlSugar.Queryable <T> queryable, Expression <Func <T, object> > expression, OrderByType type = OrderByType.asc) { ResolveExpress re = new ResolveExpress(); var field = re.GetExpressionRightFiled(expression); var pre = queryable.OrderBy.IsValuable() ? "," : ""; queryable.OrderBy += pre + field + " " + type.ToString().ToUpper(); return(queryable); }
internal static StringBuilder GetQueryableSql <T>(SqlSugar.Queryable <T> queryable) { StringBuilder sbSql = new StringBuilder(); string tableName = queryable.TableName.IsNullOrEmpty() ? queryable.TName : queryable.TableName; if (queryable.DB.Language.IsValuable() && queryable.DB.Language.Suffix.IsValuable()) { var viewNameList = LanguageHelper.GetLanguageViewNameList(queryable.DB); var isLanView = viewNameList.IsValuable() && viewNameList.Any(it => it == tableName); if (!queryable.DB.Language.Suffix.StartsWith(LanguageHelper.PreSuffix)) { queryable.DB.Language.Suffix = LanguageHelper.PreSuffix + queryable.DB.Language.Suffix; } //将视图变更为多语言的视图 if (isLanView) { tableName = typeof(T).Name + queryable.DB.Language.Suffix; } } if (queryable.DB.PageModel == PageModel.RowNumber) { #region rowNumber string withNoLock = queryable.DB.IsNoLock ? "WITH(NOLOCK)" : null; var order = queryable.OrderBy.IsValuable() ? (",row_index=ROW_NUMBER() OVER(ORDER BY " + queryable.OrderBy + " )") : null; sbSql.AppendFormat("SELECT " + queryable.Select.GetSelectFiles() + " {1} FROM {0} {2} WHERE 1=1 {3} {4} ", tableName, order, withNoLock, string.Join("", queryable.Where), queryable.GroupBy.GetGroupBy()); if (queryable.Skip == null && queryable.Take != null) { sbSql.Insert(0, "SELECT " + queryable.Select.GetSelectFiles() + " FROM ( "); sbSql.Append(") t WHERE t.row_index<=" + queryable.Take); } else if (queryable.Skip != null && queryable.Take == null) { sbSql.Insert(0, "SELECT " + queryable.Select.GetSelectFiles() + " FROM ( "); sbSql.Append(") t WHERE t.row_index>" + (queryable.Skip)); } else if (queryable.Skip != null && queryable.Take != null) { sbSql.Insert(0, "SELECT " + queryable.Select.GetSelectFiles() + " FROM ( "); sbSql.Append(") t WHERE t.row_index BETWEEN " + (queryable.Skip + 1) + " AND " + (queryable.Skip + queryable.Take)); } #endregion } else { #region offset string withNoLock = queryable.DB.IsNoLock ? "WITH(NOLOCK)" : null; var order = queryable.OrderBy.IsValuable() ? ("ORDER BY " + queryable.OrderBy + " ") : null; sbSql.AppendFormat("SELECT " + queryable.Select.GetSelectFiles() + " {1} FROM {0} {2} WHERE 1=1 {3} {4} ", tableName, "", withNoLock, string.Join("", queryable.Where), queryable.GroupBy.GetGroupBy()); sbSql.Append(order); sbSql.AppendFormat("OFFSET {0} ROW FETCH NEXT {1} ROWS ONLY", queryable.Skip, queryable.Take); #endregion } return(sbSql); }
/// <summary> /// 将Queryable转换为分页后的List《T》集合 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="queryable"></param> /// <param name="pageIndex">当前页码</param> /// <param name="pageSize">每页显示数量</param> /// <returns></returns> public static List <T> ToPageList <T>(this SqlSugar.Queryable <T> queryable, int pageIndex, int pageSize) { if (queryable.OrderBy.IsNullOrEmpty()) { throw new Exception("分页必需使用.Order排序"); } queryable.Skip = (pageIndex - 1) * pageSize; queryable.Take = pageSize; return(queryable.ToList()); }
/// <summary> /// 返回序列中的第一个元素,如果序列为NULL返回default(T) /// </summary> /// <typeparam name="T"></typeparam> /// <param name="queryable"></param> /// <returns></returns> public static T FirstOrDefault <T>(this SqlSugar.Queryable <T> queryable) { var reval = queryable.ToList(); if (reval == null || reval.Count == 0) { return(default(T)); } return(reval.First()); }
/// <summary> /// 获取序列总记录数 /// </summary> /// <param name="queryable"></param> /// <returns></returns> public static int Count <T>(this SqlSugar.Queryable <T> queryable) { StringBuilder sbSql = new StringBuilder(); string withNoLock = queryable.DB.IsNoLock ? "WITH(NOLOCK)" : null; sbSql.AppendFormat("SELECT COUNT({3}) FROM {0} {1} WHERE 1=1 {2} {4} ", queryable.TName, withNoLock, string.Join("", queryable.Where), queryable.Select.GetSelectFiles(), queryable.GroupBy.GetGroupBy()); var count = queryable.DB.GetInt(sbSql.ToString(), queryable.Params.ToArray()); return(count); }
/// <summary> /// 条件筛选 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="queryable"></param> /// <param name="expression"></param> /// <returns></returns> public static SqlSugar.Queryable <T> Where <T>(this SqlSugar.Queryable <T> queryable, Expression <Func <T, bool> > expression) { var type = queryable.Type; ResolveExpress re = new ResolveExpress(); re.ResolveExpression(re, expression); queryable.Params.AddRange(re.Paras); queryable.Where.Add(re.SqlWhere); return(queryable); }
/// <summary> /// 将Queryable转换为List《T》集合 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="queryable"></param> /// <returns></returns> public static List <T> ToList <T>(this SqlSugar.Queryable <T> queryable) { StringBuilder sbSql = SqlSugarTool.GetQueryableSql <T>(queryable); var reader = queryable.DB.GetReader(sbSql.ToString(), queryable.Params.ToArray()); var reval = SqlSugarTool.DataReaderToList <T>(typeof(T), reader, queryable.Select.GetSelectFiles()); queryable = null; sbSql = null; return(reval); }
/// <summary> /// 获取最小值 /// </summary> /// <typeparam name="TResult"></typeparam> /// <typeparam name="T"></typeparam> /// <param name="queryable"></param> /// <param name="minField">列</param> /// <returns></returns> public static TResult Min <TSource, TResult>(this SqlSugar.Queryable <TSource> queryable, string minField) { StringBuilder sbSql = new StringBuilder(); string withNoLock = queryable.DB.IsNoLock ? "WITH(NOLOCK)" : null; sbSql.AppendFormat("SELECT MIN({3}) FROM {0} {1} WHERE 1=1 {2} {4} ", queryable.TName, withNoLock, string.Join("", queryable.Where), minField, queryable.GroupBy.GetGroupBy()); var objValue = queryable.DB.GetScalar(sbSql.ToString(), queryable.Params.ToArray()); var reval = Convert.ChangeType(objValue, typeof(TResult)); return((TResult)reval); }
/// <summary> /// 返回序列的唯一元素;如果该序列并非恰好包含一个元素,则会引发异常。 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="queryable"></param> /// <param name="expression"></param> /// <returns></returns> public static T Single <T>(this SqlSugar.Queryable <T> queryable, Expression <Func <T, bool> > expression) { var type = queryable.Type; queryable.WhereIndex = queryable.WhereIndex + 100; ResolveExpress re = new ResolveExpress(queryable.WhereIndex); re.ResolveExpression(re, expression); queryable.Where.Add(re.SqlWhere); queryable.Params.AddRange(re.Paras); return(queryable.ToList().Single()); }
/// <summary> /// 条件筛选 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="queryable"></param> /// <param name="whereString"></param> /// <returns></returns> public static SqlSugar.Queryable <T> Where <T>(this SqlSugar.Queryable <T> queryable, string whereString, object whereObj = null) { var type = queryable.Type; string whereStr = string.Format(" AND {0} ", whereString); queryable.Where.Add(whereStr); if (whereObj != null) { queryable.Params.AddRange(SqlSugarTool.GetParameters(whereObj)); } return(queryable); }
/// <summary> /// 将源数据对象转换到新对象中 /// </summary> /// <typeparam name="TSource"></typeparam> /// <typeparam name="TResult"></typeparam> /// <param name="queryable"></param> /// <param name="expression"></param> /// <returns></returns> public static SqlSugar.Queryable <TResult> Select <TSource, TResult>(this SqlSugar.Queryable <TSource> queryable, string select) { var type = typeof(TSource); SqlSugar.Queryable <TResult> reval = new Queryable <TResult>() { DB = queryable.DB, OrderBy = queryable.OrderBy, Params = queryable.Params, Skip = queryable.Skip, Take = queryable.Take, Where = queryable.Where, TableName = type.Name, GroupBy = queryable.GroupBy, Select = select }; return(reval); }
/// <summary> /// 将源数据对象转换到新对象中 /// </summary> /// <typeparam name="TSource"></typeparam> /// <typeparam name="TResult"></typeparam> /// <param name="queryable"></param> /// <param name="expression"></param> /// <returns></returns> public static SqlSugar.Queryable <TResult> Select <TSource, TResult>(this SqlSugar.Queryable <TSource> queryable, Expression <Func <TSource, TResult> > expression) { var type = typeof(TSource); SqlSugar.Queryable <TResult> reval = new Queryable <TResult>() { DB = queryable.DB, OrderBy = queryable.OrderBy, Params = queryable.Params, Skip = queryable.Skip, Take = queryable.Take, Where = queryable.Where, TableName = type.Name, GroupBy = queryable.GroupBy, Select = Regex.Match(expression.ToString(), @"(?<=\{).*?(?=\})").Value }; reval.Select = Regex.Replace(reval.Select, @"(?<=\=).*?\.", ""); return(reval); }
/// <summary> /// 将Queryable转换为List《T》集合 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="queryable"></param> /// <returns></returns> public static List <T> ToList <T>(this SqlSugar.Queryable <T> queryable) { StringBuilder sbSql = new StringBuilder(); try { string withNoLock = queryable.DB.IsNoLock ? "WITH(NOLOCK)" : null; var order = queryable.OrderBy.IsValuable() ? (",row_index=ROW_NUMBER() OVER(ORDER BY " + queryable.OrderBy + " )") : null; sbSql.AppendFormat("SELECT " + queryable.Select.GetSelectFiles() + " {1} FROM {0} {2} WHERE 1=1 {3} {4} ", queryable.TableName.IsNullOrEmpty() ? queryable.TName : queryable.TableName, order, withNoLock, string.Join("", queryable.Where), queryable.GroupBy.GetGroupBy()); if (queryable.Skip == null && queryable.Take != null) { sbSql.Insert(0, "SELECT " + queryable.Select.GetSelectFiles() + " FROM ( "); sbSql.Append(") t WHERE t.row_index<=" + queryable.Take); } else if (queryable.Skip != null && queryable.Take == null) { sbSql.Insert(0, "SELECT " + queryable.Select.GetSelectFiles() + " FROM ( "); sbSql.Append(") t WHERE t.row_index>" + (queryable.Skip)); } else if (queryable.Skip != null && queryable.Take != null) { sbSql.Insert(0, "SELECT " + queryable.Select.GetSelectFiles() + " FROM ( "); sbSql.Append(") t WHERE t.row_index BETWEEN " + (queryable.Skip + 1) + " AND " + (queryable.Skip + queryable.Take)); } var reader = queryable.DB.GetReader(sbSql.ToString(), queryable.Params.ToArray()); var reval = SqlSugarTool.DataReaderToList <T>(typeof(T), reader, queryable.Select.GetSelectFiles()); queryable = null; return(reval); } catch (Exception ex) { throw new Exception(string.Format("sql:{0}\r\n message:{1}", ex.Message)); } finally { sbSql = null; queryable = null; } }
/// <summary> /// 返回序列的唯一元素;如果该序列并非恰好包含一个元素,则会引发异常。 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="queryable"></param> /// <returns></returns> public static T Single <T>(this SqlSugar.Queryable <T> queryable) { return(queryable.ToList().Single()); }
/// <summary> /// 将Queryable转换为Json /// </summary> /// <typeparam name="T"></typeparam> /// <param name="queryable"></param> /// <returns></returns> public static string ToJson <T>(this SqlSugar.Queryable <T> queryable) { return(JsonConverter.DataTableToJson(ToDataTable <T>(queryable), queryable.DB.SerializerDateFormat)); }
/// <summary> /// 将Queryable转换为Dynamic /// </summary> /// <typeparam name="T"></typeparam> /// <param name="queryable"></param> /// <returns></returns> public static dynamic ToDynamic <T>(this SqlSugar.Queryable <T> queryable) { return(JsonConverter.ConvertJson(ToJson <T>(queryable))); }
internal static StringBuilder GetQueryableSql <T>(SqlSugar.Queryable <T> queryable) { string joinInfo = string.Join(" ", queryable.JoinTableValue); StringBuilder sbSql = new StringBuilder(); string tableName = queryable.TableName.IsNullOrEmpty() ? queryable.TName : queryable.TableName; if (queryable.DB.Language.IsValuable() && queryable.DB.Language.Suffix.IsValuable()) { var viewNameList = LanguageHelper.GetLanguageViewNameList(queryable.DB); var isLanView = viewNameList.IsValuable() && viewNameList.Any(it => it == tableName); if (!queryable.DB.Language.Suffix.StartsWith(LanguageHelper.PreSuffix)) { queryable.DB.Language.Suffix = LanguageHelper.PreSuffix + queryable.DB.Language.Suffix; } //将视图变更为多语言的视图 if (isLanView) { tableName = typeof(T).Name + queryable.DB.Language.Suffix; } } if (queryable.DB.PageModel == PageModel.RowNumber) { #region rowNumber string withNoLock = queryable.DB.IsNoLock ? "WITH(NOLOCK)" : null; sbSql.AppendFormat("SELECT " + queryable.SelectValue.GetSelectFiles() + " FROM {0} {4} {1} WHERE 1=1 {2} {3} ", tableName.GetTranslationSqlName(), withNoLock, string.Join("", queryable.WhereValue), queryable.GroupByValue.GetGroupBy(), joinInfo); string strTmp = string.Empty; string strOrder = string.Empty; string strSql = string.Empty; if (queryable.OrderByValue.IsValuable()) { strOrder = " order by " + queryable.OrderByValue; strTmp = queryable.OrderByValue.IndexOf("DESC") >= 0 ? " <(select min " : " >(select max "; } if (queryable.Skip == null && queryable.Take != null) { //if (joinInfo.IsValuable()) //{ // sbSql.Insert(0, "SELECT * FROM ( "); //} //else //{ // sbSql.Insert(0, "SELECT " + queryable.SelectValue.GetSelectFiles() + " FROM ( "); //} //sbSql.Append(") t WHERE t.row_index<=" + queryable.Take); strSql = string.Format("select top {0} {1} from {2} {3} {4} where 1=1 {5} {6} {7}", queryable.Take, queryable.SelectValue.GetSelectFiles(), tableName.GetTranslationSqlName(), joinInfo, withNoLock, string.Join("", queryable.WhereValue), queryable.GroupByValue.GetGroupBy(), strOrder); } else if (queryable.Skip != null && queryable.Take == null) { //if (joinInfo.IsValuable()) //{ // sbSql.Insert(0, "SELECT * FROM ( "); //} //else //{ // sbSql.Insert(0, "SELECT " + queryable.SelectValue.GetSelectFiles() + " FROM ( "); //} //sbSql.Append(") t WHERE t.row_index>" + (queryable.Skip)); strSql = string.Format("select {0} from {1}{2}{3} where 1=1 and [{5}]{6}([{5}]) from (select top {7} [{5}] from {1}{2}{3} where 1=1 {4}{9}) as tblTmp) {4} {8} {9}", queryable.SelectValue.GetSelectFiles(), tableName.GetTranslationSqlName(), joinInfo, withNoLock, string.Join("", queryable.WhereValue), queryable.OrderByField, strTmp, queryable.Skip, queryable.GroupByValue.GetGroupBy(), strOrder); } else if (queryable.Skip != null && queryable.Take != null) { if (queryable.Skip == 0) { strSql = string.Format("select top {0} {1} from {2} {3} {4} where 1=1 {5} {6} {7}", queryable.Take, queryable.SelectValue.GetSelectFiles(), tableName.GetTranslationSqlName(), joinInfo, withNoLock, string.Join("", queryable.WhereValue), queryable.GroupByValue.GetGroupBy(), strOrder); } else { strSql = string.Format("select top {0} {1} from {2}{3}{4} where 1=1 and [{6}]{7}([{6}]) from (select top {8} [{6}] from {2}{3}{4} where 1=1 {5}{10}) as tblTmp) {5} {9} {10}", queryable.Take, queryable.SelectValue.GetSelectFiles(), tableName.GetTranslationSqlName(), joinInfo, withNoLock, string.Join("", queryable.WhereValue), queryable.OrderByField, strTmp, queryable.Skip, queryable.GroupByValue.GetGroupBy(), strOrder); } sbSql.Clear(); sbSql.Append(strSql); //if (joinInfo.IsValuable()) //{ // sbSql.Insert(0, "SELECT * FROM ( "); //} //else //{ // sbSql.Insert(0, "SELECT " + queryable.SelectValue.GetSelectFiles() + " FROM ( "); //} //sbSql.Append(") t WHERE t.row_index BETWEEN " + (queryable.Skip + 1) + " AND " + (queryable.Skip + queryable.Take)); } #endregion } else { #region offset string withNoLock = queryable.DB.IsNoLock ? "WITH(NOLOCK)" : null; var order = queryable.OrderByValue.IsValuable() ? ("ORDER BY " + queryable.OrderByValue + " ") : null; sbSql.AppendFormat("SELECT " + queryable.SelectValue.GetSelectFiles() + " {1} FROM {0} {5} {2} WHERE 1=1 {3} {4} ", tableName.GetTranslationSqlName(), "", withNoLock, string.Join("", queryable.WhereValue), queryable.GroupByValue.GetGroupBy(), joinInfo); sbSql.Append(order); if (queryable.Skip != null || queryable.Take != null) { sbSql.AppendFormat("OFFSET {0} ROW FETCH NEXT {1} ROWS ONLY", Convert.ToInt32(queryable.Skip), Convert.ToInt32(queryable.Take)); } #endregion } return(sbSql); }
/// <summary> /// 排序 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="queryable"></param> /// <param name="orderFileds">如:id asc,name desc </param> /// <returns></returns> public static SqlSugar.Queryable <T> OrderBy <T>(this SqlSugar.Queryable <T> queryable, string orderFileds) { queryable.OrderBy = orderFileds.ToSuperSqlFilter(); return(queryable); }
/// <summary> /// 将源数据对象转换到新对象中 /// </summary> /// <typeparam name="TSource"></typeparam> /// <typeparam name="TResult"></typeparam> /// <param name="queryable"></param> /// <param name="expression"></param> /// <returns></returns> public static SqlSugar.Queryable <T> Select <T>(this SqlSugar.Queryable <T> queryable, string select) { queryable.Select = select; return(queryable); }
/// <summary> /// 分组 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="queryable"></param> /// <param name="groupFileds">如:id,name </param> /// <returns></returns> public static SqlSugar.Queryable <T> GroupBy <T>(this SqlSugar.Queryable <T> queryable, string groupFileds) { queryable.GroupBy = groupFileds.ToSuperSqlFilter(); return(queryable); }
/// <summary> /// 确定序列是否包含任何元素 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="queryable"></param> /// <returns></returns> public static bool Any <T>(this SqlSugar.Queryable <T> queryable) { return(queryable.Count() > 0); }
/// <summary> /// 条件筛选 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="queryable"></param> /// <param name="expression"></param> /// <returns></returns> public static SqlSugar.Queryable <T> In <T, FieldType>(this SqlSugar.Queryable <T> queryable, string InFieldName, List <FieldType> inValues) { return(In <T, FieldType>(queryable, InFieldName, inValues.ToArray())); }
/// <summary> /// 返回序列中的第一个元素。 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="queryable"></param> /// <returns></returns> public static T First <T>(this SqlSugar.Queryable <T> queryable) { var reval = queryable.ToList(); return(reval.First()); }