2015-07-29 3 views
-1

У меня есть три сущности Role, RoleUser и UserФильтр связанные объекты или навигации собственности, где есть присоединиться к таблице в Entity Framework 6

Я хочу, чтобы выбрать каждый обязательный Role и загрузить соответствующие User «S, где RoleUser.RecordID в таблица объединения равна заданному значению.

Использование UOW и GenericReposiity Get(...) метод, который я бы назвал ...

.Get(role => role.Compulsory == true, null, "RoleUser.User") выбрать все обязательную роль и впоследствии загружены все User для навигации RoleUser.User.

Как я могу их фильтровать, можно ли использовать реализованный метод Get()?

Сущности

public class Role 
    { 
     public int RoleID { get; set; } 

     public bool Compulsory { get; set; } 

     public virtual IList<RoleUser> RoleUser { get; set; }  
    } 


    public class RoleUser 
    { 
     public string UserID { get; set; } 

     public virtual User User { get; set; } 


     public Guid RecordID { get; set; } 

     public virtual Record Record { get; set; } 


     public int RoleID { get; set; } 

     public virtual Role Role { get; set; } 
    } 


    public class User 
    { 
     public string userID { get; set; } 
    } 

Получить

public virtual IList<TEntity> Get(
     Expression<Func<TEntity, bool>> filter = null, 
     Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null, 
     string includeProperties = "") 
    { 
     IQueryable<TEntity> query = dbSet; 

     if (filter != null) 
     { 
      query = query.Where(filter); 
     } 

     foreach (var includeProperty in includeProperties.Split 
      (new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) 
     { 
      query = query.Include(includeProperty); 
     } 

     if (orderBy != null) 
     { 
      return orderBy(query).ToList(); 
     } 
     else 
     { 
      return query.ToList(); 
     } 
    } 

ответ

0

Нет, вы не можете отфильтровать RoleUser от этого Получ. если вы хотите отфильтровать RoleUser, вы хотите проецировать их в другой список.

Вы можете отфильтровать Role на основе таблицы RoleUser.

Include всегда будет содержать полные данные в таблице, если вы не используете IQuerable Projection.

var rolesWithAnyUserName = UnitOfWork.Role 
            .Get(role => role.Compulsory == true && role.RoleUser 
            .Any(g=>g.RoleUserName=="Name"), null, "RoleUser.User") 

Это будет только фильтровать Role на основе RoleUser фильтра

Если вам нужно фильтровать Include таблицы написать запрос, где вы можете отправить IQuerable в базу данных

Попробуйте что-нибудь например, это будет фильтровать как Role, так и RoleUser

var result = DataContext.Role.Where(role => role.Compulsory == true) 
       .Include(gl => gl.RoleUser) 
       .Select(x => new 
       { 
        role = x, 
        roleUsers= x.RoleUser.Where(g => g.Id == 1), 
       }).ToList(); 
Смежные вопросы