2012-03-24 72 views
0

我想用户实体操作的的站点角色的,但关键是ExtraAction实体,行动数据将是ExtraAction实体过滤器,实体框架联盟和除查询不同类型

在ExtraAction实体

如果Type属性== 1这是联盟行动实体
如果Type属性== 0这是除了行动实体

public class User 
    { 
     public int Id { get; set; } 
     public string Email { get; set; } 
     public string UserName { get; set; } 
     public string Password { get; set; } 

     public ICollection<SiteRole> SiteRoles { get; set; } 
     public ICollection<ExtraAction> ExtraActions { get; set; } 
    } 

    public class SiteRole 
    { 
     public int Id { get; set; } 
     public string Description { get; set; } 
     public virtual ICollection<Action> Actions { get; set; } 
     public virtual ICollection<User> User { get; set; } 
    } 

    public class ExtraAction 
    { 
     public int Id { get; set; } 
     public int UserId { get; set; } 
     public int ActionId { get; set; } 
     public byte Type { get; set; } 

     public virtual Action Action { get; set; } 
     public virtual User User { get; set; } 
    } 

    public class Action 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 
     public string ActionName { get; set; } 
     public string ControllerName { get; set; } 
     public ICollection<SiteRole> SiteRoles { get; set; } 
     public virtual ICollection<ExtraAction> ExtraActions { get; set; } 

    } 
+1

我不理解你所想要知道的?你能澄清你的实际问题是什么吗? – 2012-03-24 15:31:44

+0

显示你的linq声明应该澄清很多。 – 2012-03-24 19:05:16

+0

我做了,但很难解释一点对不起。 – tobias 2012-03-24 19:26:31

回答

1

最后我的解决方案是低于

var list = dbContext.Actions.Where(u => 
       u.Roles.SelectMany(r => r.User).Any(su => su.Id == Id)).Select(row => new { Action = row }). 
       Union(dbContext.ExtraActions.Where(suea => suea.Type == 1 && suea.UserId == Id).Select(row => new { Action = row.Action })). 
       Except(dbContext.ExtraActions.Where(suea => suea.Type == 0 && suea.UserId == Id).Select(row => new { Action = row.Action })).ToList();