public async Task SaveEdgesAsCsv <TFrom, TTo, TSource>( EdgeType <TFrom, TTo, TSource> edgeType, CsvFormat csvFormat) where TSource : class { try { var fromPropertyName = edgeType.From.GetPropertyName(); var toPropertyName = edgeType.To.GetPropertyName(); var sb = new StringBuilder(); sb.Append("~id,~from,~to,~label"); if (csvFormat == CsvFormat.AutoTrainer) { sb.Append(",~fromLabels,~toLabels"); } if (edgeType.Properties.Any()) { foreach (var property in edgeType.Properties) { var propertyName = property.GetPropertyName(); sb.Append($",{propertyName}"); if (csvFormat == CsvFormat.Neptune) { var propertyTypeName = GetNeptunePropertyTypeName(property.GetPropertyType()); sb.Append($":{propertyTypeName}"); } } } sb.AppendLine(); var records = await RecordsProvider.GetRecords(edgeType.Predicate); foreach (var record in records) { var fromValue = edgeType.SourceType.GetProperty(fromPropertyName).GetValue(record); var toValue = edgeType.SourceType.GetProperty(toPropertyName).GetValue(record); if (fromValue == null || toValue == null) { continue; } var id = $"{edgeType.FromType.Name}:{fromValue}:{edgeType.ToType.Name}:{toValue}".CreateMD5(); sb.Append($"{id},{fromValue},{toValue},{edgeType.Label}"); if (csvFormat == CsvFormat.AutoTrainer) { sb.Append(",{ edgeType.FromType.Name},{ edgeType.ToType.Name}"); } if (edgeType.Properties.Any()) { foreach (var property in edgeType.Properties) { var propertyName = property.GetPropertyName(); var value = Convert.ToString(edgeType.SourceType.GetProperty(propertyName).GetValue(record)); if (csvFormat == CsvFormat.Neptune) { value = GetNeptunePropertyValue(property.GetPropertyType(), value); } if (value != null && value.Contains(",")) { value = $"\"{value.Replace("\"", "\"\"")}\""; } sb.Append($",{value}"); } } sb.AppendLine(); } await FileStore.SaveFile(GraphId, "edges", $"{edgeType.Label}.csv", sb.ToString()); } catch (Exception e) { Console.WriteLine(e); throw; } }
public MedicalRecordService(RecordsProvider provider) { _provider = provider ?? new RecordsProvider(); }