0

J'ai une classe appelée Query avec un champ appelé CreatedBy, le nom d'utilisateur qui l'a créé. J'ai aussi une classe appelée Permissions avec les permissions pour la requête.Entity Framework Requête basée sur le filtre d'objet enfant et en même temps sur l'objet principal

J'ai créé une requête qui me renvoie en fonction de l'utilisateur actuel, les requêtes auxquelles l'utilisateur a accès, en fonction de la collection Permissions, mais j'ai besoin de JOIN avec les requêtes que l'utilisateur a également créées.

Si pour une raison quelconque, l'utilisateur qui l'a créé, c'est aussi dans la collection Permissions, il ne devrait pas être retourné deux fois.

Voici mon code

public class Query 
    { 
     public int QueryId { get; set; } 
     public string QueryName { get; set; } 
     public string QuerySql { get; set; } 
     public string CreatedBy { get; set; } 
     public string QueryType { get; set; } 
     public string RequestType { get; set; } 
     public string Column1 { get; set; } 
     public string Operator1 { get; set; } 
     public string Value1 { get; set; } 
     public string Connector2 { get; set; } 
     public string Column2 { get; set; } 
     public string Operator2 { get; set; } 
     public string Value2 { get; set; } 
     public string Connector3 { get; set; } 
     public string Column3 { get; set; } 
     public string Operator3 { get; set; } 
     public string Value3 { get; set; } 
     public virtual ICollection<Permission> Permissions { get; set; } 
    } 


    public class Permission 
    { 
     public int PermissionId { get; set; } 
     public string UserName { get; set; } 
    } 

    public IQueryable<Query> GetQueriesForUser(string userName) 
     { 
      return _context.Queries.Where(q => q.Permissions.Any(p => p.UserName.Equals(userName))); 
     } 

Répondre

2

Êtes-vous sûr que vous avez besoin d'une jointure? On dirait que vous avez besoin UNION ALL:

_context.Queries.Where(q => q.Permissions.Any(p => p.UserName == userName)).Concat(
    _context.Queries.Where(q => q.CreatedBy == userName)); 
Questions connexes