public SimilaritiesReport FindForIncident(int incidentId) { using (var cmd = _uow.CreateCommand()) { cmd.CommandText = @"select Id, Name, Properties from IncidentContextCollections where IncidentId = @incidentId"; cmd.AddParameter("incidentId", incidentId); var collections = new List <SimilarityCollection>(); using (var reader = cmd.ExecuteReader()) { while (reader.Read()) { var json = (string)reader["Properties"]; var properties = CoderrDtoSerializer.Deserialize <ContextCollectionPropertyDbEntity[]>(json); var col = new SimilarityCollection(incidentId, reader.GetString(1)); col.GetType().GetProperty("Id").SetValue(col, reader.GetInt32(0)); foreach (var entity in properties) { var prop = new Similarity(entity.Name); prop.LoadValues( entity.Values.Select(x => new SimilarityValue(x.Value, x.Percentage, x.Count)).ToArray()); col.Properties.Add(prop); } collections.Add(col); } } return(collections.Count == 0 ? null : new SimilaritiesReport(incidentId, collections)); } }