Не удается получить элементы группы из группы в GroupBy в IMongoQueryable mongodb c# драйвер linq - PullRequest
1 голос
/ 04 апреля 2020

Когда я пытаюсь это сделать:

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

я получаю следующее исключение:

    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 является базовым типом коллекции.

Это работает, когда я сначала загружаю коллекцию в память с помощью AsEnumerable(), а затем применяю GroupBy и другие операции, но это не вариант в моем сценарии. Есть ли шанс, что я смогу получить элементы группы в этом операторе linq на IMongoQueryable?

Я использую MongoDB.Driver 2.10.2.

1 Ответ

0 голосов
/ 14 апреля 2020

Я нашел решение через провайдера linq. Вы должны проецировать сгруппированные элементы явным образом через Select () и свойство по свойству для результата группы, например:

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