我正在努力确定实现这一目标的最聪明方法。我可能会过度思考我想要做的事情,但是这里有。
我有以下实体,简化
public class Meet
{
public int Id { get; set; }
//various properties
public List<MeetComp> Competitors { get; set; }
}
public class Competitor
{
public int Id { get; set; }
// various properties
public List<MeetComp> Meets { get; set; }
[ForeignKey("GymManager")]
public int GymManagerId { get; set; }
public GymManager GymManager { get; set; }
}
public class GymManager
{
public int Id { get; set; }
//various properties
public List<Competitor> Competitors { get; set; }
}
public class MeetComp
{
public int Id { get; set; }
[ForeignKey("Competitor")]
public int CompetitorId { get; set; }
public Competitor Competitor { get; set; }
[ForeignKey("Meet")]
public int MeetId { get; set; }
public Meet Meet { get; set; }
}
所以我正在创建一个剃刀页面,在那里我得到一个特定的Gymmanager并加载所有相关的竞争对手以显示在列表中,我工作得很好。
但是我需要另一个名单(在同一页面上)的Gymmanager的相关竞争对手,但也有一个特定的meetid在“MeetComp”表中有一个条目。因此,列表#1是我的所有竞争对手,列表#2是我为该会议注册的所有竞争者。
使用ThenInclude(),EF第一次获取数据会更聪明吗?然后我写一些逻辑来确定它们是否被添加到列表#2中?或者我应该再次访问数据库?然后,如果我再次访问数据库,那么有一种简单的方法来查询我已经拥有的CompId列表吗?
答案 0 :(得分:0)
所以我最终要做的就是再次访问数据库。
public async Task<IActionResult> GetRegisteredComps(List<int> Comps, int meetid)
{
if(Comps.Count == 0)
{
return Ok();
}
if(meetid == 0)
{
return BadRequest();
}
var query = _context.MeetsComps.Include(c => c.Competitor)
.AsQueryable();
query = query.Where(c => c.MeetId == meetid);
query = query.Where(c => Comps.Contains(c.CompetitorId));
var results = await query.ToListAsync();
return Ok(results);
}