I'm using:
And I'm performing the following LINQ Query:
        var collection = _db.GetCollection<TableA>("TableAs");
        var collectionTableB = _db.GetCollection<TableB>("TableBs");
        var collectionTableC = _db.GetCollection<TableCs>("TableCs");
        var query = from c in collection.AsQueryable()
                    join i in (from f in collectionTableB.AsQueryable()
                               join p in collectionTableC.AsQueryable() 
                                    on f.PcbaId equals p.PcbaId into i
                               from x in i.DefaultIfEmpty()
                               select new { f, x })
                  on c.AssemblyId equals i.f.AssemblyId into cap
                    from i in cap.DefaultIfEmpty()
                    select new ConfigurableItemDto {
                    };
When I execute this, it throws the following exception:
Expression of type 'System.Collections.Generic.IEnumerable`1[TableB]' cannot be used for parameter of type 'System.Linq.IQueryable`1[TableB]' of method 'System.Linq.IQueryable`1[<>f__AnonymousType2`2[TableB,System.Collections.Generic.IEnumerable`1[TableC]]] GroupJoin[Assembly,Pcba,String,<>f__AnonymousType2`2](System.Linq.IQueryable`1[TableB], System.Collections.Generic.IEnumerable`1[TableC], System.Linq.Expressions.Expression`1[System.Func`2[TableB,System.String]], System.Linq.Expressions.Expression`1[System.Func`2[TableC,System.String]], System.Linq.Expressions.Expression`1[System.Func`3[TableB,System.Collections.Generic.IEnumerable`1[TableC],<>f__AnonymousType2`2[TableB,System.Collections.Generic.IEnumerable`1[TableC]]]])' Parameter name: arg0
Is there something wrong with my query? Maybe my query is not supported by the MongoDB Driver?
The MongoDb driver does support GroupJoin, but it seems that  it doesn't support GroupJoin with a collection of anonymous types. Fortunately, your query can be rewritten as GroupJoins between MongoCollections:
var query = from a in collection.AsQueryable()
            join b in collectionTableB.AsQueryable()
                on a.AssemblyId equals b.AssemblyId into bj
            from b in bj.DefaultIfEmpty()
            join c in collectionTableC.AsQueryable() 
                on b.PcbaId equals c.PcbaId into cj
            from c in cj.DefaultIfEmpty()
            select new ConfigurableItemDto {
                 a.SomeAProperty,
                 b.SomeBProperty,
                 c.SomeCProperty,
            };
I don't have MongoDb running, so I can't try the result of this query (which I'd normally do). Please give it a try.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With