实体框架查询基于子对象过滤器并同时在主对象上

时间:2012-06-01 07:42:39

标签: c# linq entity-framework entity-framework-4 entity-framework-4.1

我有一个名为Query的类,其中包含一个名为CreatedBy的字段,即创建它的用户名。 我还有一个名为Permissions的类,它具有查询权限。

我创建了一个查询,根据当前用户,用户有权访问的查询,根据Permissions集合返回我,但我需要将其与用户也创建的查询一起加入。

如果由于某种原因,创建它的用户,也在Permissions集合中,它不应该被返回两次。

这是我的代码

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

1 个答案:

答案 0 :(得分:2)

您确定需要加入吗?看起来您需要UNION ALL

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