Entity framework 具有实体框架继承的webapi
假设我有以下实体:Entity framework 具有实体框架继承的webapi,entity-framework,asp.net-core-webapi,Entity Framework,Asp.net Core Webapi,假设我有以下实体: abstract class User { string Id string Name } class UserA : User { List<UserB> Bs } class UserB : User { string UserAId [ForeignKey("UserAId"), JsonIgnore] UserA UserA } 如何在没有额外属性的情况下获取集合 [ { "
abstract class User
{
string Id
string Name
}
class UserA : User
{
List<UserB> Bs
}
class UserB : User
{
string UserAId
[ForeignKey("UserAId"), JsonIgnore]
UserA UserA
}
如何在没有额外属性的情况下获取集合
[
{
"id": "0",
"name": "User A",
"Bs": [
{
"id": "1"
},
{
"id": "2"
}
]
},
{
"aId": "0",
"id": "1",
"name": "User B 1"
},
{
"aId": "0",
"id": "2",
"name": "User B 2"
}
]
并从“Bs”集合返回此json,不带“aId”和“name”要从类型UserA的Bs集合返回ID,需要根据类型筛选出值,然后在Bs集合上使用SelectMany
[
{
"id": "0",
"name": "User A",
"Bs": [
{
"id": "1",
"name" : ....
"aId": ....
},
{
"id": "2",
"name" : ....
"aId": ....
}
]
},
{
"aId": "0",
"id": "1",
"name": "User B 1"
},
{
"aId": "0",
"id": "2",
"name": "User B 2"
}
]
[HttpGet]
public IEnumerable<int> Get()
{
return _context.Where(e => (e is UserA))
.Select(u => (UserA)u)
.SelectMany(b => b.Bs)
.ToList();
}
[HttpGet]
公共IEnumerable Get()
{
返回_context.Where(e=>(e是UserA))
.选择(u=>(UserA)u)
.SelectMany(b=>b.Bs)
.ToList();
}
我认为您可以使用select语句来投影id,如:
_context.Users.Select(user => user.id)
您必须更改退货类型
参考:
我用这个方法解决了这个问题:
[HttpGet]
public IEnumerable<dynamic> Get()
{
IEnumerable<dynamic> res = _context.Users.OfType<UserA>()
.Select(u => new {Id = u.Id, Name = u.Name, Users = u.Users.Select(ui => new { Id = ui.Id }) })
.ToArray();
res = res.Concat<dynamic>(_context.Users.OfType<UserB>());
return res;
}
[HttpGet]
公共IEnumerable Get()
{
IEnumerable res=_context.Users.OfType()
.Select(u=>new{Id=u.Id,Name=u.Name,Users=u.Users.Select(ui=>new{Id=ui.Id})})
.ToArray();
res=res.Concat(_context.Users.OfType());
返回res;
}
我只需要“Bs”集合中的ID谢谢Marcus,我有两个问题-我无法从users集合中选择Many(u=>u.Bs),因为Bs只是UserA的一个属性-我需要IEnumerable类型的结果,我用一个示例更新了问题。我只需要“Bs”集合中的ID
[HttpGet]
public IEnumerable<dynamic> Get()
{
IEnumerable<dynamic> res = _context.Users.OfType<UserA>()
.Select(u => new {Id = u.Id, Name = u.Name, Users = u.Users.Select(ui => new { Id = ui.Id }) })
.ToArray();
res = res.Concat<dynamic>(_context.Users.OfType<UserB>());
return res;
}