public M Select(Expression <Func <M, bool> > expression) { ConditionBuilder builder = this.GetBuilder(expression); string text = "select top 1 * from " + this.type.Name + " {0} "; text = string.Format(text, builder.Condition); DataTable dataTable = this.DBbase.GetDataTable(text, builder.Arguments.ToArray()); IList <M> list = ConvertHelper.GetList <M>(dataTable); M result = default(M); if (list != null && list.Count > 0) { result = list[0]; } return(result); }
public List <M> GetListRow <TKey, F>(Expression <Func <M, bool> > expression, Expression <Func <M, TKey> > orderby, bool IsDesc, int pStart, int pSize, Expression <Func <M, F> > fields) { ConditionBuilder builder = this.GetBuilder(expression); string str = string.Empty; if (orderby != null) { str = " order by " + ((MemberExpression)orderby.Body).Member.Name + (IsDesc ? " desc " : " asc "); } string str2 = this.FieldsByNew <F>(fields); string sql = string.Format("select " + str2 + ", ROW_NUMBER() OVER({1}) AS RowNumber from " + this.type.Name + " {0} ", builder.Condition, str); if (pSize > 0) { sql = string.Concat("select * from (", sql, ") tttx where RowNumber Between ", (pStart - 1) * pSize + 1, " and ", pStart * pSize); } DataTable dataTable = this.DBbase.GetDataTable(sql, builder.Arguments.ToArray()); builder.Arguments = null; return(ConvertHelper.GetList <M>(dataTable)); }
private object ProviderCallBack(Expression expression, Type returnType) { MethodCallExpression methodCallExpression = (MethodCallExpression)expression; ConditionBuilder conditionBuilder = new ConditionBuilder(); conditionBuilder.Build(expression, this.type, true); object obj = null; string name; if ((name = methodCallExpression.Method.Name) != null) { if (_sqlKeywords == null) { _sqlKeywords = new Dictionary <string, int>(8) { { "FirstOrDefault", 0 }, { "First", 1 }, { "Select", 2 }, { "Skip", 3 }, { "Take", 4 }, { "OrderByDescending", 5 }, { "OrderBy", 6 }, { "Count", 7 } }; } int num; if (_sqlKeywords.TryGetValue(name, out num)) { DataTable dataTable; switch (num) { case 0: case 1: { dataTable = this.DBbase.GetDataTable(conditionBuilder.Condition, conditionBuilder.Arguments.ToArray()); object obj2; if (AnonymouseHelper.IsAnonyousType(returnType)) { obj2 = ConvertHelper.GetAnonymous(dataTable, returnType); } else { obj2 = ConvertHelper.GetList(dataTable, returnType); } IEnumerable enumerable = (IEnumerable)obj2; IEnumerator enumerator = enumerable.GetEnumerator(); try { if (enumerator.MoveNext()) { object current = enumerator.Current; obj = current; } return(obj); } finally { IDisposable disposable = enumerator as IDisposable; if (disposable != null) { disposable.Dispose(); } } break; } case 2: case 3: case 4: case 5: case 6: break; case 7: obj = this.DBbase.GetSingle(conditionBuilder.Condition, conditionBuilder.Arguments.ToArray()); obj = Convert.ToInt32(obj); return(obj); default: return(obj); } Type[] genericArguments = returnType.GetGenericArguments(); returnType = ((genericArguments.Length == 0) ? this.type : genericArguments[0]); dataTable = this.DBbase.GetDataTable(conditionBuilder.Condition, conditionBuilder.Arguments.ToArray()); if (AnonymouseHelper.IsAnonyousType(returnType)) { obj = ConvertHelper.GetAnonymous(dataTable, returnType); } else { obj = ConvertHelper.GetList(dataTable, returnType); } obj = (IEnumerable)obj; } } return(obj); }