Entity framework 用于连接多个表并在单行中获取逗号分隔值的LINQ查询
我在下面的表格中列出了这些值 账户: 身份证件 名称 电子邮件 101 纳西尔乌丁 nasir@email.comEntity framework 用于连接多个表并在单行中获取逗号分隔值的LINQ查询,entity-framework,linq,Entity Framework,Linq,我在下面的表格中列出了这些值 账户: 身份证件 名称 电子邮件 101 纳西尔乌丁 nasir@email.com 我终于找到了答案。结果可以通过不同的方式实现。举例如下: var answer1 = (from account in userAccounts join accountRole in accountRoles on account.Id equals accountRole.AccountId join role in roles on accountRole.R
我终于找到了答案。结果可以通过不同的方式实现。举例如下:
var answer1 = (from account in userAccounts
join accountRole in accountRoles on account.Id equals accountRole.AccountId
join role in roles on accountRole.RoleId equals role.Id
select new UserAccount
{
AccountId = account.Id,
Name = account.Name,
Email = account.Email,
Roles = role.Title
}).ToList().GroupBy(x => new { x.AccountId, x.Name, x.Email }).Select(y => new UserAccount
{
AccountId = y.Key.AccountId,
Name = y.Key.Name,
Email = y.Key.Email,
Roles = string.Join(", ", y.Select(a => a.Roles))
}).ToList();
----------------------------------------------------------------------------
var answer2 = (from account in userAccounts
join accountRole in accountRoles on account.Id equals accountRole.AccountId
join role in roles on accountRole.RoleId equals role.Id
group new { account, role } by new { account.Id, account.Name, account.Email } into ag
select new UserAccount
{
AccountId = ag.Key.Id,
Name = ag.Key.Name,
Email = ag.Key.Email,
Roles = string.Join(", ", ag.Select(x=> x.role.Title))
}).ToList();
----------------------------------------------------------------------------
var answer3 = (from account in userAccounts
let roles1 = from accountRole in accountRoles
join role in roles on accountRole.RoleId equals role.Id
where accountRole.AccountId == account.Id
select role
select new UserAccount
{
AccountId = account.Id,
Name = account.Name,
Email = account.Email,
Roles = string.Join(", ", roles1.Select(x => x.Title))
}).ToList();
我终于找到了答案。结果可以通过不同的方式实现。举例如下:
var answer1 = (from account in userAccounts
join accountRole in accountRoles on account.Id equals accountRole.AccountId
join role in roles on accountRole.RoleId equals role.Id
select new UserAccount
{
AccountId = account.Id,
Name = account.Name,
Email = account.Email,
Roles = role.Title
}).ToList().GroupBy(x => new { x.AccountId, x.Name, x.Email }).Select(y => new UserAccount
{
AccountId = y.Key.AccountId,
Name = y.Key.Name,
Email = y.Key.Email,
Roles = string.Join(", ", y.Select(a => a.Roles))
}).ToList();
----------------------------------------------------------------------------
var answer2 = (from account in userAccounts
join accountRole in accountRoles on account.Id equals accountRole.AccountId
join role in roles on accountRole.RoleId equals role.Id
group new { account, role } by new { account.Id, account.Name, account.Email } into ag
select new UserAccount
{
AccountId = ag.Key.Id,
Name = ag.Key.Name,
Email = ag.Key.Email,
Roles = string.Join(", ", ag.Select(x=> x.role.Title))
}).ToList();
----------------------------------------------------------------------------
var answer3 = (from account in userAccounts
let roles1 = from accountRole in accountRoles
join role in roles on accountRole.RoleId equals role.Id
where accountRole.AccountId == account.Id
select role
select new UserAccount
{
AccountId = account.Id,
Name = account.Name,
Email = account.Email,
Roles = string.Join(", ", roles1.Select(x => x.Title))
}).ToList();
下面根据您的帖子中提供的信息(以及一些假设,因为我在您的任何表中都找不到,例如,
UserFullName
),使用Lambda表达式(不是查询表达式)给出了预期结果
注意:我也相信有一种更有效的方法可以做到这一点,但如果没有其他方法的话,这是一个起点
(以下是正在使用的.NET小提琴:):
这将产生以下输出:
下面根据您的帖子中提供的信息(以及一些假设,因为我在您的任何表中都找不到,例如,
UserFullName
),使用Lambda表达式(不是查询表达式)给出了预期结果
注意:我也相信有一种更有效的方法可以做到这一点,但如果没有其他方法的话,这是一个起点
(以下是正在使用的.NET小提琴:):
这将产生以下输出:
您得到了什么结果?您使用的是实体框架吗?这看起来不像典型的EF查询。EF通常会在UserAccount类中创建AccountRole属性,在AccountRole类中在后台创建Role属性,这样就不需要在查询中使用aexplicit联接。请检查更改的代码您是先使用代码还是先使用数据库?请显示帐户类定义。您得到了什么结果?您使用的是实体框架吗?这看起来不像典型的EF查询。EF通常会在UserAccount类中创建AccountRole属性,在AccountRole类中在后台创建Role属性,这样就不需要在查询中使用aexplicit联接。请检查更改的代码您是先使用代码还是先使用数据库?请显示帐户类定义。谢谢回答。谢谢回答。我很高兴看到这个关于如何使用查询表达式(多种方式)实现的答案。这将是将来如何在Lambda上使用查询表达式的一个很好的参考。非常感谢。我很高兴看到这个关于如何使用查询表达式(多种方式)实现的答案。这将是将来如何在Lambda上使用查询表达式的一个很好的参考。非常感谢。