예제 #1
0
        public IList <T> Complete <T>()
        {
            var queryResult = currentQueryResults.CreateSnapshot();

            foreach (var include in SerializationHelper.RavenJObjectsToJsonDocuments(queryResult.Includes))
            {
                sessionOperations.TrackIncludedDocument(include);
            }

            var list = queryResult.Results
                       .Select(x => x != null ? Deserialize <T>(x) : default(T))
                       .ToList();

            if (disableEntitiesTracking == false)
            {
                sessionOperations.RegisterMissingIncludes(queryResult.Results.Where(x => x != null), includes);
            }

            if (transformResults == null)
            {
                return(list);
            }

            return(transformResults(indexQuery, list.Cast <object>()).Cast <T>().ToList());
        }
예제 #2
0
        public T[] Complete <T>()
        {
            for (var i = 0; i < includeResults.Length; i++)
            {
                var include = includeResults[i];
                sessionOperations.TrackIncludedDocument(include);
            }

            var finalResults = ids != null?
                               ReturnResultsById <T>() :
                                   ReturnResults <T>();

            for (var i = 0; i < finalResults.Length; i++)
            {
                var finalResult = finalResults[i];
                if (ReferenceEquals(finalResult, null))
                {
                    sessionOperations.RegisterMissing(ids[i]);
                }
            }

            var includePaths = includes != null?includes.Select(x => x.Key).ToArray() : null;

            sessionOperations.RegisterMissingIncludes(results.Where(x => x != null).Select(x => x.DataAsJson), includePaths);

            return(finalResults);
        }
예제 #3
0
        public T[] Complete <T>()
        {
            for (var i = 0; i < includeResults.Length; i++)
            {
                var include = includeResults[i];
                sessionOperations.TrackIncludedDocument(include);
            }

            var transformedResults = TransformResults().ToList();
            var finalResults       = transformedResults.Select(ApplyTrackingIfNeeded <T>)
                                     .ToArray();

            for (var i = 0; i < finalResults.Length; i++)
            {
                if (ReferenceEquals(finalResults[i], null))
                {
                    sessionOperations.RegisterMissing(ids[i]);
                }
            }

            var includePaths = includes != null?includes.Select(x => x.Key).ToArray() : null;

            sessionOperations.RegisterMissingIncludes(results.Where(x => x != null).Select(x => x.DataAsJson), includePaths);

            return(finalResults);
        }
예제 #4
0
        public T[] Complete <T>(MultiLoadResult multiLoadResult)
        {
            foreach (var include in SerializationHelper.RavenJObjectsToJsonDocuments(multiLoadResult.Includes))
            {
                documentSession.TrackIncludedDocument(include);
            }

            if (typeof(T).IsArray)
            {
                var arrayOfArrays = multiLoadResult.Results
                                    .Select(x =>
                {
                    if (x == null)
                    {
                        return(null);
                    }

                    var values = x.Value <RavenJArray>("$values").Cast <RavenJObject>();

                    var elementType = typeof(T).GetElementType();
                    var array       = values.Select(value =>
                    {
                        EnsureNotReadVetoed(value);
                        return(documentSession.ProjectionToInstance(value, elementType));
                    }).ToArray();
                    var newArray = Array.CreateInstance(elementType, array.Length);
                    Array.Copy(array, newArray, array.Length);
                    return(newArray);
                })
                                    .Cast <T>()
                                    .ToArray();

                return(arrayOfArrays);
            }

            var items = ParseResults <T>(multiLoadResult.Results)
                        .ToArray();

            if (items.Length > ids.Length)
            {
                throw new InvalidOperationException(String.Format("A load was attempted with transformer {0}, and more than one item was returned per entity - please use {1}[] as the projection type instead of {1}",
                                                                  transformer,
                                                                  typeof(T).Name));
            }

            return(items);
        }
예제 #5
0
        public IList <T> Complete <T>()
        {
            var queryResult = currentQueryResults.CreateSnapshot();

            foreach (var include in SerializationHelper.RavenJObjectsToJsonDocuments(queryResult.Includes))
            {
                sessionOperations.TrackIncludedDocument(include);
            }

            var usedTransformer = string.IsNullOrEmpty(indexQuery.Transformer) == false;
            var list            = new List <T>();

            foreach (var result in queryResult.Results)
            {
                if (result == null)
                {
                    list.Add(default(T));
                    continue;
                }

                if (usedTransformer)
                {
                    var values = result.Value <RavenJArray>("$values");
                    foreach (RavenJObject value in values)
                    {
                        list.Add(Deserialize <T>(value));
                    }

                    continue;
                }

                list.Add(Deserialize <T>(result));
            }

            if (disableEntitiesTracking == false)
            {
                sessionOperations.RegisterMissingIncludes(queryResult.Results.Where(x => x != null), indexQuery.Includes);
            }

            if (transformResults == null)
            {
                return(list);
            }

            return(transformResults(indexQuery, list.Cast <object>()).Cast <T>().ToList());
        }