#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);