Driver version: 3.0.0 (I've tried all versions between 2.20.0 to 3.0.0 and none of them worked)
.NET SDK Version 8.0.403
Trivial example:
BsonClassMap.RegisterClassMap<Pages>(cm =>
{
cm.AutoMap();
cm.MapIdMember(c => c.Id);
});
BsonClassMap.RegisterClassMap<PageContainer>(cm =>
{
cm.AutoMap();
cm.MapIdMember(c => c.Id);
});
var client = new MongoClient("mongodb://localhost:27017");
var database = client.GetDatabase("playground");
var pages = database.GetCollection<Pages>("pages");
var pageContainers = database.GetCollection<PageContainer>("pagecontainers");
var pagesWithContainers = await (from page in pages.AsQueryable().Where(x => x.TenantId == 1)
join container in pageContainers.AsQueryable() on page.Id equals container.PageId into containers
select new
{
page.Id,
page.Title,
Containers = containers
}).ToListAsync();
Console.ReadLine();
public class Pages
{
public required ObjectId Id { get; init; }
public required string Title { get; init; }
}
public class PageContainer
{
public required ObjectId Id { get; init; }
public required ObjectId PageId { get; init; }
public required string Content { get; init; }
}
The exception i get:
Unhandled exception. MongoDB.Driver.Linq.ExpressionNotSupportedException: Expression not supported: playground.pagecontainers.Aggregate([]).Where(x => (x.TenantId == 1)) in playground.pages.Aggregate([]).Where(x => (x.TenantId == 1)).GroupJoin(playground.pagecontainers.Aggregate([]).Where(x => (x.TenantId == 1)), page => page.Id, container => container.PageId, (page, containers) => new <>f__AnonymousType0`3(Id = page.Id, Title = page.Title, Containers = containers)) because inner expression must be a MongoDB IQueryable against a collection. at MongoDB.Driver.Linq.Linq3Implementation.ExtensionMethods.ExpressionExtensions.GetCollectionInfo(Expression innerExpression, Expression containerExpression) at MongoDB.Driver.Linq.Linq3Implementation.Translators.ExpressionToPipelineTranslators.GroupJoinMethodToPipelineTranslator.Translate(TranslationContext context, MethodCallExpression expression) at MongoDB.Driver.Linq.Linq3Implementation.Translators.ExpressionToPipelineTranslators.ExpressionToPipelineTranslator.Translate(TranslationContext context, Expression expression) at MongoDB.Driver.Linq.Linq3Implementation.Translators.ExpressionToExecutableQueryTranslators.ExpressionToExecutableQueryTranslator.Translate[TDocument,TOutput](MongoQueryProvider`1 provider, Expression expression, ExpressionTranslationOptions translationOptions) at MongoDB.Driver.Linq.Linq3Implementation.MongoQuery`2.ToCursorAsync(CancellationToken cancellationToken) at MongoDB.Driver.IAsyncCursorSourceExtensions.ToListAsync[TDocument](IAsyncCursorSource`1 source, CancellationToken cancellationToken) at Program.<Main>$(String[] args) in /Users/keremacer/Projects/Playground/Playground/Program.cs:line 25 at Program.<Main>(String[] args)
If I remove ".Where(x => x.TenantId == 1)" from pageContainers.AsQueryable(), it works