I’m trying to create Dot Net LINQ query to having left join with multiple collection. It seems like not supported with .NET Driver.
MongoDB Version: 5.0.3
.NET Driver Version: 2.18.0
Linq Provider: V3
----- Linq Query -----
var teamDetailsQuery = (from team in _DBContext.Teams.AsQueryable()
join teamAllianceMappingsList in DBContext.TeamAllianceMappings.AsQueryable() on team.TeamId equals teamAllianceMappingsList.TeamId into teamAllianceMappingsListTemp
from allinceMapping in teamAllianceMappingsListTemp.DefaultIfEmpty()
join organizationAdminsList in _DBContext.OrganizationAdmins.AsQueryable() on team.OrganizationId equals organizationAdminsList.OrganizationId into organizationAdminsListTemp
from organizationAdmin in organizationAdminsListTemp.DefaultIfEmpty()
join usersList in _AGLMongoDBContext.Users.AsQueryable() on organizationAdmin.UserId equals usersList.UserId into usersListTemp
from organizationUser in usersListTemp.DefaultIfEmpty()
select new
{
TeamId = team.TeamId,
TeamName = team.TeamName,
OrganizationLogo = (organizationUser != null ? organizationUser.ProfileImage : team.OrganizationLogo),
OrganizationName = team.OrganizationName,
AllianceTeamId = allinceMapping.AllianceTeamId
}).AsQueryable();
var teamDetails = teamDetailsQuery.FirstOrDefault();
----- Error -----
System.InvalidOperationException: Operation is not valid due to the current state of the object.
at MongoDB.Driver.Linq.Linq3Implementation.Serializers.WrappedValueSerializer`1.TryGetMemberSerializationInfo(String memberName, BsonSerializationInfo& serializationInfo)
at MongoDB.Driver.Linq.Linq3Implementation.Misc.DocumentSerializerHelper.HasFieldInfo(IBsonSerializer serializer, String memberName)
at MongoDB.Driver.Linq.Linq3Implementation.Translators.ExpressionToAggregationExpressionTranslators.MemberExpressionToAggregationExpressionTranslator.Translate(TranslationContext context, MemberExpression expression)
at MongoDB.Driver.Linq.Linq3Implementation.Translators.ExpressionToAggregationExpressionTranslators.MemberExpressionToAggregationExpressionTranslator.Translate(TranslationContext context, MemberExpression expression)
at MongoDB.Driver.Linq.Linq3Implementation.Translators.ExpressionToAggregationExpressionTranslators.MemberExpressionToAggregationExpressionTranslator.Translate(TranslationContext context, MemberExpression expression)
at MongoDB.Driver.Linq.Linq3Implementation.Misc.LambdaExpressionExtensions.GetFieldPath(LambdaExpression fieldSelectorLambda, TranslationContext context, IBsonSerializer parameterSerializer)
at MongoDB.Driver.Linq.Linq3Implementation.Translators.ExpressionToPipelineTranslators.GroupJoinMethodToPipelineTranslator.Translate(TranslationContext context, MethodCallExpression expression)
at MongoDB.Driver.Linq.Linq3Implementation.Translators.ExpressionToPipelineTranslators.SelectManyMethodToPipelineTranslator.Translate(TranslationContext context, MethodCallExpression expression)
at MongoDB.Driver.Linq.Linq3Implementation.Translators.ExpressionToPipelineTranslators.GroupJoinMethodToPipelineTranslator.Translate(TranslationContext context, MethodCallExpression expression)
at MongoDB.Driver.Linq.Linq3Implementation.Translators.ExpressionToPipelineTranslators.SelectManyMethodToPipelineTranslator.Translate(TranslationContext context, MethodCallExpression expression)
at MongoDB.Driver.Linq.Linq3Implementation.Translators.ExpressionToExecutableQueryTranslators.ExpressionToExecutableQueryTranslator.Translate[TDocument,TOutput](MongoQueryProvider`1 provider, Expression expression)
at MongoDB.Driver.Linq.Linq3Implementation.MongoQuery`2.ToString()
----- Expression -----
{agl.Teams.Aggregate([]).GroupJoin(agl.TeamAllianceMappings.Aggregate([]), team => team.TeamId, teamAllianceMappingsList => teamAllianceMappingsList.TeamId, (team, teamAllianceMappingsListTemp) => new <>f__AnonymousType307`2(team = team, teamAllianceMappingsListTemp = teamAllianceMappingsListTemp)).SelectMany(<>h__TransparentIdentifier0 => <>h__TransparentIdentifier0.teamAllianceMappingsListTemp.DefaultIfEmpty(), (<>h__TransparentIdentifier0, allinceMapping) => new <>f__AnonymousType308`2(<>h__TransparentIdentifier0 = <>h__TransparentIdentifier0, allinceMapping = allinceMapping)).GroupJoin(agl.OrganizationAdmins.Aggregate([]), <>h__TransparentIdentifier1 => <>h__TransparentIdentifier1.<>h__TransparentIdentifier0.team.OrganizationId, organizationAdminsList => Convert(organizationAdminsList.OrganizationId, Nullable`1), (<>h__TransparentIdentifier1, organizationAdminsListTemp) => new <>f__AnonymousType309`2(<>h__TransparentIdentifier1 = <>h__TransparentIdentifier1, organizationAdminsListTemp = organizationAdminsListTemp)).SelectMany(<>h__TransparentIdentifier2 => <>h__TransparentIdentifier2.organizationAdminsListTemp.DefaultIfEmpty(), (<>h__TransparentIdentifier2, organizationAdmin) => new <>f__AnonymousType310`2(<>h__TransparentIdentifier2 = <>h__TransparentIdentifier2, organizationAdmin = organizationAdmin)).GroupJoin(agl.Users.Aggregate([]), <>h__TransparentIdentifier3 => <>h__TransparentIdentifier3.organizationAdmin.UserId, usersList => usersList.UserId, (<>h__TransparentIdentifier3, usersListTemp) => new <>f__AnonymousType311`2(<>h__TransparentIdentifier3 = <>h__TransparentIdentifier3, usersListTemp = usersListTemp)).SelectMany(<>h__TransparentIdentifier4 => <>h__TransparentIdentifier4.usersListTemp.DefaultIfEmpty(), (<>h__TransparentIdentifier4, organizationUser) => new <>f__AnonymousType312`5(TeamId = <>h__TransparentIdentifier4.<>h__TransparentIdentifier3.<>h__TransparentIdentifier2.<>h__TransparentIdentifier1.<>h__TransparentIdentifier0.team.TeamId, TeamName = <>h__TransparentIdentifier4.<>h__TransparentIdentifier3.<>h__TransparentIdentifier2.<>h__TransparentIdentifier1.<>h__TransparentIdentifier0.team.TeamName, OrganizationLogo = IIF((organizationUser != null), organizationUser.ProfileImage, <>h__TransparentIdentifier4.<>h__TransparentIdentifier3.<>h__TransparentIdentifier2.<>h__TransparentIdentifier1.<>h__TransparentIdentifier0.team.OrganizationLogo), OrganizationName = <>h__TransparentIdentifier4.<>h__TransparentIdentifier3.<>h__TransparentIdentifier2.<>h__TransparentIdentifier1.<>h__TransparentIdentifier0.team.OrganizationName, AllianceTeamId = <>h__TransparentIdentifier4.<>h__TransparentIdentifier3.<>h__TransparentIdentifier2.<>h__TransparentIdentifier1.allinceMapping.AllianceTeamId))}
Please advice the solution.