public void PipelineStageDefinitionBuilder_GroupForLinq3_with_expressions_should_throw_with_LINQ2() { var(groupStageDefinition, projectStageDefinition) = PipelineStageDefinitionBuilder.GroupForLinq3((BsonDocument x) => 1, x => new { Count = x.Count() }); var exception = Record.Exception(() => Linq3TestHelpers.Render(groupStageDefinition, BsonDocumentSerializer.Instance, LinqProvider.V2)); exception.Should().BeOfType <InvalidOperationException>(); }
/// <summary> /// Appends a group stage to the pipeline. /// </summary> /// <typeparam name="TResult">The type of the result.</typeparam> /// <typeparam name="TKey">The type of the key.</typeparam> /// <typeparam name="TNewResult">The type of the new result.</typeparam> /// <param name="aggregate">The aggregate.</param> /// <param name="id">The id.</param> /// <param name="group">The group projection.</param> /// <returns> /// The fluent aggregate interface. /// </returns> public static IAggregateFluent <TNewResult> Group <TResult, TKey, TNewResult>(this IAggregateFluent <TResult> aggregate, Expression <Func <TResult, TKey> > id, Expression <Func <IGrouping <TKey, TResult>, TNewResult> > group) { Ensure.IsNotNull(aggregate, nameof(aggregate)); if (aggregate.Database.Client.Settings.LinqProvider == LinqProvider.V2) { return(aggregate.AppendStage(PipelineStageDefinitionBuilder.Group(id, group))); } else { var(groupStage, projectStage) = PipelineStageDefinitionBuilder.GroupForLinq3(id, group); return(aggregate.AppendStage(groupStage).AppendStage(projectStage)); } }
public void PipelineStageDefinitionBuilderGroupForLinq3_with_expressions_should_work_with_LINQ3() { var(groupStageDefinition, projectStageDefinition) = PipelineStageDefinitionBuilder.GroupForLinq3((BsonDocument x) => 1, x => new { Count = x.Count() }); var groupStage = Linq3TestHelpers.Render(groupStageDefinition, BsonDocumentSerializer.Instance, LinqProvider.V3); var groupingSerializer = new IGroupingSerializer <int, BsonDocument>(new Int32Serializer(), BsonDocumentSerializer.Instance); var projectStage = Linq3TestHelpers.Render(projectStageDefinition, groupingSerializer, LinqProvider.V3); var expectedStages = new[] { "{ $group : { _id : 1, __agg0 : { $sum : 1 } } }", "{ $project : { Count : '$__agg0', _id : 0 } }" }; Linq3TestHelpers.AssertStages(new[] { groupStage, projectStage }, expectedStages); }