2014-05-19 139 views
1

我有一個對象(機票),其具有一個關聯到另一個對象(WorkflowItem),它反過來具有權限(WorkflowItemPermissions)的集合。我想實現(不用於套住自己死亡)是允許調用的結果讓所有的門票,以便能夠篩選出基於具有特定角色/角色用戶的所有門票。所以這裏是一些代碼:好吧,這是基本的對象圖(請原諒任何編譯器錯誤,這僅僅是爲了舉例)。我試圖做到的,是這樣的基於集合交集過濾結果?

service.All(new List<int>{1,2,3,4,5}); 

從上面的片斷,你可以看到,我想回去的所有門票,其中WorkflowPermission.RoleID是在傳遞到方法調用的角色列表中的電話。這是我迄今爲止的,但它既不工作也不編譯(就像那些是互斥的LOL)。

public List<Ticket> All(List<int> Roles) 
{ 
    List<Ticket> tickets = _repository.All().Where(c=> Roles.Intersect(c.WorkflowItem.Permissions.Select(a => a.RoleID))).ToList(); 

    return tickets; 
} 

現在通常你會使用一個簡單的包含或類似過濾(即「中的」基本條款),但這是整型的2個集之間的文件管理器。首先這是可能的,其次,請告訴我如何。

回答

0

試試這個

public List<Ticket> All(List<int> Roles) 
{ 
    List<Ticket> tickets = _repository.All().Where(x => x.Workflow.Permissions.Any(y => Roles.Contains(y.RoleID))).ToList<Ticket>(); 

    return tickets; 
} 
0

我不確定是什麼問題。這項工作對我來說絕對正確:

 var a = new List<int> { 1, 2, 3 }; 
     var b = new List<int> { 3, 4, 5 }; 

     var c = a.Intersect(b).ToList(); 
     Console.WriteLine(string.Join(",",c.Select(c1 => c1+"").ToArray())); 
     Console.ReadKey(); 

回報:3

0

試試這個:

tickets.Where(ti => ti.Workflow.Permissions.Any(p => permissions.Contains(p.RoleID))) 

其中

var permissions = new List<int>{1,2,3,4,5} 

和 '門票' 是IEnumerable<Ticket>包含所有門票