c# - C# 深度连接查询
问题描述
目前我有下面的代码,它返回一个列表,它通过 4 个表锦标赛 -> Tournament_PlayerIDs -> PlayerIDs_Players -> Players。我想要做的是返回一个玩家使用他们的 ID 注册参加的锦标赛列表。
public IEnumerable<Tournament> GetAllTournaments()
{
return _appDbContext.Tournaments
.Include(f => f.PlayerIDIDs)
.ThenInclude(PlayerIDIDs => PlayerIDIDs.Player)
.ThenInclude(Player=> Player.Player)
.Include(f => f.TournamentGame)
.Include(f => f.TournamentFormat).ToList();
}
我想要的是
public IEnumerable<Tournament> GetAllTournaments(string id)
{
return _appDbContext.Tournaments
.Include(f => f.PlayerIDIDs)
.ThenInclude(PlayerIDIDs => PlayerIDIDs.Player)
.ThenInclude(Player=> Player.Player)
.Include(f => f.TournamentGame)
.Include(f => f.TournamentFormat)
.Where (f.PlayerIDIDs.Player.Player.Id == id)
.ToList();
}
模型结构
public class Tournament
{
[Key]
public int TournamentID { get; set; }
[Required]
[StringLength(100, ErrorMessage = "Game name is required")]
public string TournamentName { get; set; }
[Required]
[StringLength(5000, ErrorMessage = "Short Desc is required")]
public string TournamentDescription { get; set; }
public bool IsMajorTournament { get; set; }
public decimal TournamentFee { get; set; }
public DateTime TournamentStartTime { get; set; }
//Foregin Keys
public int? GameID { get; set; }
public Game TournamentGame { get; set; }
public int? FormatID { get; set; }
public Format TournamentFormat { get; set; }
public ICollection<PlayerID_Tournament> PlayerIDIDs { get; } = new List<PlayerID_Tournament>();
}
public class PlayerID_Tournament
{
public int PlayerIDID { get; set; }
public PlayerID Player { get; set; }
public int TournamentID { get; set; }
public Tournament Tournament { get; set; }
}
public class PlayerID
{
//Identity for Player ID
[Key]
public int PlayerIDID { get; set; }
//Id for Game such as DCI number
public string PlayerGameID { get; set; }
//game info
public int GameId { get; set; }
public Game Game { get; set; }
//user info
public string PlayerId { get; set; }
public ApplicationUser Player { get; set; }
public ICollection<PlayerID_Tournament> Tournaments { get; } = new List<PlayerID_Tournament>();
}
public class ApplicationUser : IdentityUser
{
public string FirstName { get; set;}
public string LastName { get; set; }
public ICollection<PlayerID> PlayerIDs { get; set; }
}
解决方案
我相信您正在寻找的东西称为SelectMany。我相信链接中的示例涵盖了您想要的内容(获取给定玩家参加的所有锦标赛)
推荐阅读
- tensorflow - 如何解决问题模块“tensorflow_core.contrib”没有属性“lite”?
- javascript - 星金字塔每秒打印一次
- javascript - 使用 jQuery 格式化父元素的 CSS
- kubernetes - Istio 自动扩展需要调整断路器 maxConnections (http 1.1)?
- spring-boot - Dockerized Spring Boot 应用程序无法连接到数据库容器
- java - infinispan hibernate 二级缓存 - 需要 XML 配置格式
- python - 在 Google Colab 中解压 .torrent 文件
- python - 如何解决“列表”对象属性“排序”是只读的
- flutter - Google Script onChange 未检测到自动行创建
- c# - 调用 web 服务导致错误“对象引用未设置为对象的实例”