/// <summary> /// 确定序列是否包含任何元素。 /// </summary> /// <typeparam name="T">表实体类型</typeparam> /// <param name="queryable">查询对象</param> /// <param name="expression">表达式条件</param> /// <returns>count>0返回true</returns> public static bool Any <T>(this 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.DB); queryable.WhereValue.Add(re.SqlWhere); queryable.Params.AddRange(re.Paras); return(queryable.Count() > 0); }
/// <summary> /// 返回序列的唯一元素;如果该序列并非恰好包含一个元素,否则返回null。 /// </summary> /// <typeparam name="T">表实体类型</typeparam> /// <param name="queryable">查询对象</param> /// <param name="expression">表达式条件</param> /// <returns>T</returns> public static T SingleOrDefault <T>(this 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.DB); queryable.WhereValue.Add(re.SqlWhere); queryable.Params.AddRange(re.Paras); return(queryable.ToList().SingleOrDefault()); }
/// <summary> /// 条件筛选 /// </summary> /// <typeparam name="T">表实体类型</typeparam> /// <typeparam name="T2">表实体类型</typeparam> /// <typeparam name="T3">表实体类型</typeparam> /// <typeparam name="T4">表实体类型</typeparam> /// <typeparam name="T5">表实体类型</typeparam> /// <param name="queryable">查询对象</param> /// <param name="expression">表达式条件</param> /// <returns>Queryable</returns> public static Queryable <T> Where <T, T2, T3, T4, T5>(this Queryable <T> queryable, Expression <Func <T, T2, T3, T4, T5, bool> > expression) { var type = queryable.Type; queryable.WhereIndex = queryable.WhereIndex + 100; ResolveExpress re = new ResolveExpress(queryable.WhereIndex); re.Type = ResolveExpressType.nT; re.ResolveExpression(re, expression, queryable.DB); queryable.Params.AddRange(re.Paras); queryable.WhereValue.Add(re.SqlWhere); return(queryable); }
/// <summary> /// 联表查询 /// </summary> /// <typeparam name="T">第一个表的对象</typeparam> /// <typeparam name="T2">联接表的对象</typeparam> /// <typeparam name="T3">联接表的对象</typeparam> /// <param name="queryable">查询对象</param> /// <param name="expression">条件表达式</param> /// <param name="type">Join的类型</param> /// <returns>Queryable</returns> public static Queryable <T> JoinTable <T, T2, T3>(this Queryable <T> queryable, Expression <Func <T, T2, T3, object> > expression, JoinType type = JoinType.LEFT) { queryable.DB.InitAttributes <T3>(); ResolveExpress re = new ResolveExpress(); queryable.WhereIndex = queryable.WhereIndex + 100; re.Type = ResolveExpressType.nT; var exLeftStr = Regex.Match(expression.ToString(), @"\((.+?)\).+").Groups[1].Value; var exLeftArray = exLeftStr.Split(','); var shortName1 = exLeftArray[1]; var shortName2 = exLeftArray[2]; re.ResolveExpression(re, expression, queryable.DB); string joinTypeName = type.ToString(); string joinTableName = null; if (queryable.DB._mappingTableList.IsValuable()) { //别名表 if (queryable.DB._mappingTableList.IsValuable()) { string name = typeof(T3).Name; if (queryable.DB._mappingTableList.Any(it => it.Key == name)) { joinTableName = queryable.DB._mappingTableList.First(it => it.Key == name).Value; } } } if (joinTableName.IsNullOrEmpty()) { joinTableName = typeof(T3).Name; } string joinStr = string.Format(" {0} JOIN {1} {2} ON {3} ", /*0*/ queryable.JoinTableValue.Count == 0 ? (" " + shortName1 + " " + joinTypeName) : joinTypeName.ToString(), /*1*/ joinTableName.GetTranslationSqlName(), /*2*/ shortName2, /*3*/ re.SqlWhere.Trim().TrimStart('A').TrimStart('N').TrimStart('D') ); queryable.JoinTableValue.Add(joinStr); queryable.Params.AddRange(re.Paras); return(queryable); }