嘿庫馬爾,我創建了一個小型控制檯應用程序來模仿我相信你有的數據。我認爲它展現了你正在尋找的行爲。這不是世界上最偉大的代碼,但我認爲算法是關鍵。我只是將ToString()的一個快速覆蓋放在一起以正確顯示數據。
我做的最主要的變化是創建一個定義的類要顯示的數據,並打破LINQ查詢分成兩個獨立的部分:
using System;
using System.Collections.Generic;
using System.Linq;
namespace Test
{
class Program
{
static void Main()
{
var users = new List<User>
{
new User
{
UserID = "1"
},
new User
{
UserID = "2"
},
new User
{
UserID = "3"
}
};
var roles = new List<Role>
{
new Role
{
RoleID = "1",
RoleName = "Admin"
},
new Role
{
RoleID = "2",
RoleName = "Employee"
}
};
var userRoles = new List<UserRole>
{
new UserRole
{
UserID = "1",
RoleID = "1"
},
new UserRole
{
UserID = "1",
RoleID = "2"
},
new UserRole
{
UserID = "2",
RoleID = "2"
},
new UserRole
{
UserID = "3",
RoleID = "2"
}
};
var userRoles2 = from u in users
orderby u.UserID
select new UserList
{
UserID = u.UserID,
Roles = (from r in roles
join ur in userRoles
on u.UserID equals ur.UserID
where ur.RoleID == r.RoleID
select r).ToList()
};
foreach (var item in userRoles2)
{
Console.WriteLine(item);
}
Console.ReadKey();
}
}
public class User
{
public string UserID;
}
public class UserRole
{
public string UserID;
public string RoleID;
}
public class Role
{
public string RoleID;
public string RoleName;
}
public class UserList
{
public string UserID;
public List<Role> Roles;
public override string ToString()
{
string output = UserID + " ";
foreach (var role in Roles)
{
output += role.RoleName + ", ";
}
output = output.Substring(0, output.Length - 2);
return output;
}
}
}