Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This pull request introduces comprehensive support for LINQ-style
GroupByqueries in LiteDB, enabling users to group query results using strongly-typed expressions and work withIGrouping<TKey, TElement>results. The changes span the query interface, query pipeline, expression visitor, and type mapping to provide a seamless and efficient grouping experience.Key changes:
LINQ GroupBy Support and Interface Updates
GroupBy<K>(Expression<Func<T, K>> keySelector)method to theILiteQueryable<T>interface, allowing users to group results and receiveIGrouping<K, T>objects. TheSelectmethods were also updated to returnILiteQueryableinstead ofILiteQueryableResultfor consistency. [1] [2] [3] [4]Grouping Implementation
LiteGrouping<TKey, TElement>class as a concrete implementation ofIGrouping<TKey, TElement>, enabling materialization of grouping results.BsonMapper.RegisterGroupingTypeto handle serialization and deserialization of groupings, ensuring correct mapping between BSON and .NET groupings.Query Pipeline and Execution Enhancements
Having, and in-memory ordering of grouped results. Added new internal structures (GroupSource,GroupedResult) and logic for efficient grouping and ordering. [1] [2] [3] [4]ORDER BYafter grouping and to avoid redundant ordering when the grouping expression matches the index.Expression Visitor and Resolver Improvements
IGrouping<,>types, enabling support for LINQ methods such asSelect,Where, and aggregation functions on groupings. [1] [2] [3]GroupingResolverto map LINQ methods and properties onIGroupingto LiteDB expressions.These changes collectively enable robust, efficient, and type-safe group-by queries in LiteDB, aligning its LINQ capabilities more closely with standard .NET query patterns.