Hap*_*nut 3 c# linq entity-framework asp.net-web-api
这可能是已经提出的问题,但是我仍然无法解决我的问题。我什至不知道我走的路是否正确。一些帮助将不胜感激。
我在ASP.NET Web API项目中有两个模型类,如下所示:
namespace Artists.Models
{
public class Artist
{
public int ArtistID { get; set; }
public string ArtistName { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
和:
namespace Artists.Models
{
public class Project
{
public int ProjectID { get; set; }
public string ProjectName { get; set; }
public int ArtistID { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
这在中创建了两个SQL表ArtistID作为外键连接Project。
我有此控制器代码:
public IQueryable<Object> GetArtists()
{
return from a in db.Artists
join p in db.Projects on a.ArtistID equals p.ArtistID
select new
{
account_name = a.ArtistName,
project_name = p.ProjectName
};
}
Run Code Online (Sandbox Code Playgroud)
在Postman中返回以下输出:
[
{
"name": "Jack",
"project_name": "ProjectOne"
},
{
"name": "Mike",
"project_name": "ProjectTwo"
},
{
"name": "Mike",
"project_name": "ProjectThree"
},
{
"name": "John",
"project_name": "ProjectFour"
},
{
"name": "John",
"project_name": "ProjectFive"
}
]
Run Code Online (Sandbox Code Playgroud)
但我希望输出是这样的:
[
{
"name": "Jack",
"projects": ["ProjectOne"]
},
{
"name": "Mike",
"projects": ["ProjectTwo", "ProjectThree"]
},
{
"name": "John",
"projects": ["ProjectFour", "ProjectFive"]
},
]
Run Code Online (Sandbox Code Playgroud)
我什至靠近吗?我知道这可能是一个问题,但我真的不知道。
如果你想使用保留查询语法,你可以加入到集合,然后投射其结果只返回ProjectName从artistProjects,即:
public IQueryable<Object> GetArtists()
{
return from a in db.Artists
join p in db.Projects on a.ArtistID equals p.ArtistID into artistProjects
select new
{
name = a.ArtistName,
projects = artistProjects.Select(ap => ap.ProjectName)
};
}
Run Code Online (Sandbox Code Playgroud)
如果您想使用方法语法,请阅读以下内容。您可以将导航属性添加到Artist,即:
namespace Artists.Models
{
public class Artist
{
public int ArtistID { get; set; }
public string ArtistName { get; set; }
public ICollection<Project> Projects { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
然后修改您的查询渴望负载(加入)Projects为Artist:
public IQueryable<Object> GetArtists()
{
return db.Artists
.Include(a => a.Projects)
.Select(a =>
new
{
name = a.ArtistName,
projects = a.Projects.Select(p => p.ProjectName)
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3565 次 |
| 最近记录: |