gpt4 book ai didi

c# - 如何为多对多关系编写简单的 LINQ 报告?

转载 作者:行者123 更新时间:2023-11-30 17:47:53 25 4
gpt4 key购买 nike

我的应用程序将 ASP.NET Identity 2 与存储在 SQL Server 2012 关系表中的表一起使用。下面是我想用于报告的两个类的 View :

public partial class AspNetUser
{
public AspNetUser()
{
this.AspNetRoles = new List<AspNetRole>();
}
public string Id { get; set; }
public string UserName { get; set; }
public virtual ICollection<AspNetRole> AspNetRoles { get; set; }
}

public partial class AspNetRole
{
public AspNetRole()
{
this.AspNetUsers = new List<AspNetUser>();
}
public string Id { get; set; }
public string Name { get; set; }
public virtual ICollection<AspNetUser> AspNetUsers { get; set; }
}

我创建了以下 LINQ 来给我一份报告:

    var users = await db.AspNetUsers
.Include(u => u.AspNetRoles)
.ToListAsync();

这是在 WebAPI 方法中,当我检查结果时,它给了我一个结果出乎我的意料。我看到的是一组用户对象和然后在里面是一组角色。但是在角色数组中是另一组用户!

这是我看到的输出,其中省略了一些字段以使其显示轻松:

[{"id":"27cd003a-fb6a-4a2d-8df9-f502bc10a583"
"aspNetRoles":[
{
"id":"53724f55-af7a-448b-9ae2-1fe295b109fd",
"name":"Admin",
"aspNetUsers":[
{
"id":"527ddbd5-14d3-4fb9-a7ae-374e66f635d4",
"aspNetRoles":[]
},
{
"id":"e87c05bc-8305-45d0-ba07-3dd24438ba8b",
"aspNetRoles":[]
}
]},
{"id":"527ddbd5-14d3-4fb9-a7ae-374e66f635d4",

如何更改 LINq,以便它为我提供一个 AspNetUser 对象数组并在一个简单的 AspNetRole 对象数组中?我还需要查询来向我显示用户,即使他们没有角色。像这样:

User1
Role1
Role2
User2
Role1
User3
User4
Role2

最佳答案

如您所说,您无法控制域类——它们属于 Microsoft。所以,你真正想说的是你不想将你的域对象直接暴露给世界其他地方(用谷歌搜索,你会发现各种各样的人对这个主题有意见)。因此,一个选择是定义一组您想要公开的类(数据交换类)。像这样的东西:

public class User
{
public string Id { get; set; }
public string UserName { get; set; }
public virtual List<Role> Roles { get; set; }
}
public class Role
{
public string Id { get; set; }
public string Name { get; set; }
}

然后,当您取回域对象时,将它们映射到您的数据交换对象中以进行序列化并公开给世界其他地方。

关于c# - 如何为多对多关系编写简单的 LINQ 报告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24063130/

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