using MongoDB.Bson; using MongoDB.Driver; using System.Linq.Expressions; using UGQDataAccess.Repository.Models; using UGQDatabase.Models; public static class ReserveAccountGradeQuery { public class AllReserveAccountGradeQueryJoin : ReserveAccountGradeEntity { public IEnumerable Accounts { get; set; } = null!; } public static Expression> ReserveAccountGradeItemResultProjection = x => new ReserveAccountGradeItemResult { ReserveId = x.Id.ToString(), UserGuid = x.UserGuid, CurrentGradeType = x.BeforeGradeType, AccountId = x.Accounts.First().AccountId ?? string.Empty, ReserveGradeType = x.ReserveGradeType, ReserveTime = x.ReserveTime, UpdatedAt = x.UpdatedAt, IsCompleted = x.IsCompleted, }; public static PipelineDefinition allReserveAccountGradePipeline( FilterDefinition filter, Expression> projection) { var lookupStage1 = new BsonDocument("$lookup", new BsonDocument { { "from", "Account" }, { "localField", "UserGuid" }, { "foreignField", "UserGuid" }, { "as", "Accounts" } }); var pipeline = new EmptyPipelineDefinition() .Match(filter) .AppendStage(lookupStage1) .Project(projection); return pipeline; } }