1
J'ai 3 tables:LINQ to SQL et rejoindre problème
USER
=====
USER_ID(PK)
FISRT_NAME
LAST_NAME
...
ROLES
======
ROLE_ID (PK)
NAME
USER_ROLES
==========
USER_ID(PK, FK)
ROLE_ID(PK, FK)
Je veux extraire toutes les données utilisateur et tous ses rôles (séparés par une virgule) en ligne unique.
Sometging comme ceci:
1 | John | Smith | Power user, Administrator
2 | John | Doe | Guest
Je ne sais pas comment faire. Merci de votre aide.
modifier:
J'ai essayé quelque chose comme ceci:
List<UserDTO> users = null;
using (CarShopDataContext dc = DB.GetContext())
{
users = (from u in dc.Users
select new UserDTO
{
UserId = u.UserId,
Username = u.Username,
FirstName = u.FirstName,
LastName = u.LastName,
Roles = ""
}).ToList();
foreach (var user in users)
{
var roles = (from ur in dc.UserRoles
join r in dc.Roles on ur.RoleId equals r.RoleId
where ur.UserId == user.UserId
select r.Name).ToList();
StringBuilder userRoles = new StringBuilder();
for (int j = 0; j < roles.Count; j++)
{
userRoles.Append(roles[j]);
if (j < roles.Count - 1)
userRoles.Append(", ");
}
user.Roles = userRoles.ToString();
}
}
return users;
J'utilise LINQ 2 SQL et je reçois une erreur sur la fonction globale: « Impossible de convertir l'expression lambda pour déléguer type « System.Func 'parce que certains des types de retour je n le bloc n'est pas implicitement convertible au type de retour délégué " –
Voir la réponse mise à jour. Le précédent LINQ essayait d'effectuer la concaténation agrégée sur l'ensemble de l'objet anonyme - je lui ai maintenant demandé de simplement sélectionner le champ 'RoleName'. –