gpt4 book ai didi

linq-to-sql - LINQ TO SQL 查询

转载 作者:行者123 更新时间:2023-12-01 00:04:02 25 4
gpt4 key购买 nike

我有一个 LINQ TO SQL 查询,它检索所有用户及其角色:

var userRoles = from u in db.GetTable<User>()
join ur in db.GetTable<UserRole>()
on u.UserID equals ur.UserID
join r in db.GetTable<Role>()
on ur.RoleID equals r.RoleID
orderby u.UserID
select new
{
u.UserID,
r.RoleName
};

系统中的一个用户可以有多个角色。此查询的结果(以表格格式)如下所示:

1 管理员
1 名员工
2 员工
3 员工

如何重写此查询以将所有用户角色作为逗号分隔值返回,例如:

1 名管理员、员工
2 员工
3 员工

最佳答案

嘿 Kumar,我创建了一个小型控制台应用程序来模拟我相信您拥有的数据。我认为它展示了你正在寻找的行为。这不是世界上最伟大的代码,但我认为算法才是重点。我只是快速覆盖 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;
}
}
}

关于linq-to-sql - LINQ TO SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2240195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com