Mongo Driver Linq Query抛出异常

时间:2017-09-20 10:39:29

标签: c# linq mongodb-.net-driver

我正在使用:

  • Asp.net Core 1.1
  • MongoDB驱动程序2.4.4

我正在执行以下LINQ查询:

        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 {

                    };

执行此操作时,会抛出以下异常:

  

类型'System.Collections.Generic.IEnumerable`1 [TableB]'的表达式不能用于方法'System.Linq.IQueryable`1的'System.Linq.IQueryable`1 [TableB]'类型的参数&lt;&gt; f__AnonymousType2`2 [TableB,System.Collections.Generic.IEnumerable`1 [TableC]]] GroupJoin [Assembly,Pcba,String,&lt;&gt; 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],&lt;&gt; f__AnonymousType2` 2 [表B,System.Collections.Generic.IEnumerable`1 [表C]]]])”           参数名称:arg0

我的查询有问题吗?也许MongoDB驱动程序不支持我的查询?

1 个答案:

答案 0 :(得分:1)

MongoDb驱动程序does support GroupJoin,但它似乎并不支持GroupJoin一组匿名类型。幸运的是,您的查询可以在GroupJoin s:

之间重写为MongoCollection
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,
            };

我没有运行MongoDb,因此我无法尝试此查询的结果(我通常会这样做)。请试一试。