2012-03-24 6 views
0

ich möchte Benutzer Einheit mit Aktion ist von der Website Rolle aber Punkt ist ExtraAction Einheit, wird Action-Datenfilter werden durch ExtraAction Einheit,Entity Framework Union und Außer-Abfrage auf verschiedene Arten

in ExtraAction Einheit:

wenn Eigenschaft Typ == 1 dieser UNION zu sein, um Entity-Aktion
wenn Eigenschaft Typ == 0 diese AUSSER sein, um Entity-Aktion

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

Ich verstehe nicht, was Sie versuchen zu bekommen? Können Sie erklären, was Ihr tatsächliches Problem ist? –

+0

Das Anzeigen Ihrer Linq-Anweisung sollte viel verdeutlichen. –

+0

Ich tat, aber schwer zu erklären, tut mir leid. – tobias

Antwort

1

endlich meine Lösung ist unter

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