Search code examples
c#mongodblinqmongodb-.net-drivermongodb-csharp-2.0

Cannot get group items from group in GroupBy on IMongoQueryable mongodb c# driver linq statement


When I try this:

var groupedItems = _collection
    .AsQueryable()
    .GroupBy(pv => pv.ArticleNumber, (k, s) => new { k, Items = s })
    .Select(group => group.Items)
    .ToList();

I get the following exception:

    System.ArgumentException: Value type of serializer is ProductVersion[] and does not match member type System.Collections.Generic.IEnumerable`1[[ProductVersion, ProductService, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]. (Parameter 'serializer')
   at MongoDB.Bson.Serialization.BsonMemberMap.SetSerializer(IBsonSerializer serializer)...

ProductVersion is the underlying type of the collection.

It works when I load the collection into memory via AsEnumerable() first and then apply the GroupBy and other operations but that is not an option in my scenario. Is there any chance I can get the group items themselves in that linq statement on IMongoQueryable?

I am using MongoDB.Driver 2.10.2.


Solution

  • I found a solution via linq provider. You have to project the grouped Items explicitly via Select() and property by property on the group result, e.g.:

    var groupedItems = _collection
        .AsQueryable()
        .GroupBy(pv => pv.ArticleNumber, (key, group) => new
        {
            key,
            Items = group.Select(groupItem => new ProductVersion { PropertyA = groupItem.PropertyA, ... })
        })
    ...