Пример #1
0
        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;
            }
        }
Пример #2
0
 public MedicalRecordService(RecordsProvider provider)
 {
     _provider = provider ?? new RecordsProvider();
 }
 public MedicalRecordService(RecordsProvider provider)
 {
     _provider = provider ?? new RecordsProvider();
 }