两表连接

来源:互联网 发布:卡尔曼滤波融合算法 编辑:程序博客网 时间:2024/05/01 15:13
        #region 两表连接        /// <summary>        /// 查询两表的集合         /// 使用例子:(可以参考linq join的用法)        /// List《dynamic》 Result = basebll_Jyxt.GetJoinList《Sys_User, Sys_User_BC, string, dynamic》(a => a.Guid, g => g.Guid,        /// (a, g) => new {a.Area,a.IsValid,a.UserId,g.Guid, g.GCLB });        /// </summary>        /// <typeparam name="TOuter">第一张表对应实体类</typeparam>        /// <typeparam name="TInner">第二张表对应实体类</typeparam>        /// <typeparam name="TKey">连接的字段的类型</typeparam>        /// <typeparam name="TResult">返回的实体类型</typeparam>        /// <param name="outerKeySelector">第一张表对应的连接字段</param>        /// <param name="innerKeySelector">第二张表对应的连接字段</param>        /// <param name="resultSelector">需要查询的字段</param>        /// <param name="IsLeftJoin">是否left join,true表示left join,false表示inner join</param>        /// <returns>结果实体</returns>        public List<TResult> GetJoinList<TOuter, TInner, TKey, TResult>(Expression<Func<TOuter, TKey>> outerKeySelector,            Expression<Func<TInner, TKey>> innerKeySelector, Expression<Func<TOuter, TInner, TResult>> resultSelector, Boolean IsLeftJoin)            where TOuter : class            where TInner : class            where TResult : class        {            using (SysDb<TOuter, TInner> db = new SysDb<TOuter, TInner>(strConn))            {                if (IsLeftJoin)                {                    return db.Set<TOuter>().LeftOuterJoin(db.Set<TInner>(), outerKeySelector, innerKeySelector, resultSelector).ToList();                }                else                {                    return db.Set<TOuter>().Join(db.Set<TInner>(), outerKeySelector, innerKeySelector, resultSelector).ToList();                }            }        }

调用      

      List<dynamic> Result = basebll_Jyxt.GetJoinList<Sys_User, Sys_User_BC, dynamic, dynamic>                ((a => new { a.Guid, a.UserId }), (g => new { g.Guid, UserId = g.UserIdBcId }),                 (a, g) => new { a.Area, a.IsValid, a.UserId, g.Guid, g.GCLB }, false);




0 0