2013-01-09 22 views
2

我有3個實體,用戶,任務和權限。用戶可以擁有很多權限。任務也有許多與他們相關的權限。我試圖在查詢中捕獲的想法是這樣的:我的任務需要由具有該任務所需的所有正確權限的用戶完成。查詢列表屬性包含其他列表中的所有內容的所有實體

我很努力的查詢。我想,這是我需要的:

var userList = context.Users 
         .Include("Permissions") 
         .Where(x => neededPermissionFromTask.Except(x.Permissions).Count() == 0).ToList(); 

但我得到一個異常:

無法創建類型「權限」的恆定值。在此 上下文中僅支持原始類型 類型(如Int32,String和Guid)。

感謝任何幫助,建議或意見。

回答

1

不是傳遞許可對象名單,通過IDS的權限:

var ids = neededPermissionFromTask.Select(p => p.Id).ToList(); 
var userList = 
    context.Users.Include("Permissions") 
      .Where(u => ids.Except(u.Permissions.Select(p => p.Id)).Count() == 0) 
      .ToList(); 
+1

謝謝!像魅力一樣工作。 –

0

異常是由您的列表neededPermissionFromTask造成的 - 實體框架不知道如何處理Permission對象的列表。

我會建議這樣的事情 - 找到具有ID taskId任務所需的所有權限的所有用戶。

var users = context.Users 
        .Where(user => context.Tasks 
             .Single(task => task.Id == taskId) 
             .Permissions 
             .All(permission => user.Permissions 
                   .Contains(permission))) 
        .ToList(); 

我不知道如果Permissions.Contains(permission)將工作 - 在這個問題提到這樣可能會導致同樣的錯誤。但是有一個簡單的方法 - 不是查看對象是否包含在集合中,而是查找具有相同ID的對象。

相關問題