2016-10-04 57 views
0

我有3個表LINQ 3個表 - 新LINQ

用戶 - 用戶名,名字,姓氏等

角色 - 角色ID,角色名

特點 - UserId,RoleId

我想使用LINQ

顯示具有共同特徵的用戶

請幫

+2

分享您的研究可以幫助每個人。告訴我們你試過的東西以及爲什麼 它不符合你的需求。這表明你已經花時間 試圖幫助自己,它使我們避免重申明顯的答案, ,最重要的是它可以幫助您獲得更具體和相關的答案! 另請參閱[問]。 – RamenChef

回答

0
from u in Users 
join f in Features on u.UserId equals f.UserId 
join r in Roles on r.RoleId equals f.RoleId 
where f.RoleId == 1 
select new { u.FirstName,u.LastName,r.RoleName} 
+0

感謝您的及時響應託尼。我想這將返回所有用戶及其功能。我想看看用戶和功能,如果他們有共同的特點,就像用戶1是角色1和用戶2是角色1.任何幫助嗎? – ram

+0

查看上面新的更新代碼 –

1

你可以嘗試查找:

//Associate the role names with the features 
var featureRoles = dbContext.Roles.Join(dbContext.Features, 
         role => role.RoleId, 
         feature => feature.RoleId, 
         (role, feature) => new { 
               RoleId = feature.RoleId, 
               UserId = feature.UserId, 
               RoleName = role.RoleName 
               }); 

//Create ILookup 
var lookup = dbContext.Users.Join(featureRoles, 
         user => user.UserID, 
         fr => fr.UserId, 
         (user, fr) => new { 
              User = user, 
              RoleName = fr.RoleName, 
              RoleId = fr.RoleId 
             }) 
         .ToLookup(r => r.RoleName, s => s.User); 

這將您的用戶可以通過他們的角色名稱,例如排序:

var users = lookup["role 1"]; 
foreach(var user in users) 
{ 
    Console.WriteLine("Users in Role 1:"); 
    Console.WriteLine("\t{0} {1}", user.Firstname, user.Lastname); 
} 

Output: 
"Users in Role 1:" 
     "John Smith" 
     "Foo Bar" 
     ... 

如果你想通過角色id而不是名字來搜索,那麼你需要t o將查找定義更改爲.ToLookup(r=> r.RoleId, s=> s.User)