private List <ActorForCharacterFullDto> GetActorsForCharactersInVideo(long videoId, List <Character> characters, SqliteConnection db) { var characterIds = characters.Select(c => c.CharacterId); var actorCommand = new SqliteCommand($"SELECT a.creator_id, a.character_id, c.name, c.deleted FROM actor_for_video_character a, character c WHERE a.video_id = {videoId} AND a.creator_id = c.character_id AND a.character_id IN ({string.Join(",", characterIds)})", db); var actorQuery = actorCommand.ExecuteReader(); var dtos = new List <ActorForCharacterFullDto>(); var foundCharacters = new Dictionary <long, ActorForCharacterFullDto>(); foreach (var character in characters) { var dto = new ActorForCharacterFullDto(character, -1, "", ""); dtos.Add(dto); foundCharacters[character.CharacterId] = dto; } while (actorQuery.Read()) { var deleted = actorQuery.GetBoolean(3); if (deleted) { continue; } var characterId = actorQuery.GetInt64(1); var character = characters.Find(c => c.CharacterId == characterId); var dto = foundCharacters[characterId]; dto.ActorId = actorQuery.GetInt64(0); dto.ActorName = actorQuery.GetString(2); } return(dtos); }
public void AddCharacterToVideos(Character character, List <Video> videos) { using (var db = DataAccessUtil.CreateSqlConnection()) { db.Open(); using (var txn = db.BeginTransaction()) { var dto = new ActorForCharacterFullDto(character); foreach (var video in videos) { InsertCharacterInVideoDetails(video.VideoId, new List <ActorForCharacterFullDto> { dto }, db, txn); } txn.Commit(); } } }