Привет, Кумар, я создал небольшое консольное приложение, чтобы имитировать данные, которые, я полагаю, у тебя есть. Я думаю, что это демонстрирует поведение, которое вы ищете, хотя. Это не самый лучший код в мире, но я думаю, что алгоритм - это главное. Я просто собрал быстрое переопределение 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;
}
}
}