Состояние будет указано во время выполнения толькоDynamic Linq запрос для соединения двух таблиц с более чем одним условием (динамически)
Я попытался внутреннее соединение с двумя таблицами с одним условием динамично, оно работает нормально. , но с еще два или состояния динамически, его не working.Please помочь мне решить эту проблему
Пожалуйста, смотрите случаи
случай 1: присоединиться с одним условием (работает нормально)
Base entity:User
entity to join :Role
condition to join: Role.Id = User.RoleId
//select * from User inner join Role on User.RoleId=Role.Id
//static way
IQueryable<UserEntity> query =
db.Set<user>().Join(db.Set<Role>(),
user => User.RoleId,
role=> role.Id,
(user , role) => new { user , role }).Select(temp=> temp.user);
//Dynamic Way **(working fine)**
ParameterExpression lambdaExprVar_Role = Expression.Parameter(typeof(Role), "role");
PropertyInfo rightPropertyInfo_role = typeof(Role).GetProperty("Id");
Expression rightExpression_role = Expression.Property(lambdaExprVar_Role, rightPropertyInfo_role);
Expression<Func<Role, Int64>> myexp_role = Expression.Lambda<Func<Role, Int64>>(rightExpression_role , new ParameterExpression[] { lambdaExprVar_Role });
ParameterExpression lambdaExprVar_User = Expression.Parameter(typeof(User), "user");
PropertyInfo rightPropertyInfo_user = typeof(User).GetProperty("RoleId");
Expression rightExpression_user = Expression.Property(lambdaExprVar_User, rightPropertyInfo_user);
Expression<Func<User, Int64>> myexp_user = Expression.Lambda<Func<User, Int64>>(rightExpression_user, new ParameterExpression[] { lambdaExprVar_User });
IQueryable<OrganizationNode> query = db.Set<User>()
.Join(db.Set<Role>(), myexp_user, myexp_role, (user, role) => new {user, role})
.Select(temp=>temp.user);
случай 2: присоединиться два условия (не работает)
Base entity:User
entity to join :Role
condition to join: Role.Id==User.RoleId,Role.Code==User.RoleCode
//select * from User inner join Role on User.RoleId=Role.Id and User.RoleCode=Role.Code
//static way **(working fine)**
IQueryable<User> query =
db.Set<user>().Join(db.Set<Role>(),
**user => new { matchId = user.RoleId, matchcode= user.RoleCode},
role=> new { matchId = role.Id, matchcode= role.code},**
(user , role) => new { user , role }).Select(temp=> temp.user);
//Dynamic Way (**** not working)
Помогите мне написать/переписать код.