Beispiel #1
0
        public void Serialize(T source, Entity destination)
        {
            var serializationInfo = _analyzer.GetSerializationInfo <T>();

            foreach (var info in serializationInfo.Where(x => !x.IsKey))
            {
                var sourceValue = info.Get(source);
                if (sourceValue == null)
                {
                    continue;
                }

                var propertyValue = GetValueFromPropertyValue(info.PropertyType, sourceValue);
                propertyValue.ExcludeFromIndexes = info.ExcludeFromIndexes;

                destination.Properties.Add(info.Property, propertyValue);
            }
        }
Beispiel #2
0
        private Filter ConvertFilter(StorageFilter filter)
        {
            switch (filter)
            {
            case AndFilter and:
                return(Filter.And(and.Filters.Select(ConvertFilter)));

            case ComparisonFilter <T> comparisonFilter:
                var serializationInfo = _entityAnalyzer.GetSerializationInfo(comparisonFilter.Property);
                var compareValue      = _serializer.GetValueFromPropertyValue(serializationInfo.PropertyType, comparisonFilter.Value);
                return(comparisonFilter.ComparisonType switch
                {
                    ComparisonType.Equals => Filter.Equal(serializationInfo.Property, compareValue),
                    ComparisonType.GreaterThan => Filter.GreaterThan(serializationInfo.Property, compareValue),
                    ComparisonType.LessThan => Filter.LessThan(serializationInfo.Property, compareValue),
                    _ => throw new ArgumentOutOfRangeException()
                });