Проблема возникает в этой строке:
Sales = l.Sales.Where(a => a.Owner.Id == userId || a.Manager.Id == userId).ToList()
Что здесь происходит?Драйвер MongoDB принимает это выражение и пытается преобразовать его в синтаксис структуры агрегации.Есть оператор $ filter , который можно запустить на вложенной коллекции, и драйвер может преобразовать .Where()
в этот оператор, однако в конце этого выражения нет ничего, соответствующего .ToList()
, и поэтому он терпит неудачу.
Итак, исправление довольно простое: вам просто нужно использовать IEnumerable<T>
вместо List<T>
для свойства Sales
, а затем избавиться от этого .ToList()
, чтобы ваш код выглядел следующим образом:
public async Task<IEnumerable<Listing>> LoadAllUserListings(string userId)
{
var result = _context.Listing.Aggregate().Match(l => l.OwnerId == userId || l.Sales.Any(a => a.Owner.Id == userId)).
Project(l => new Listing
{
Id = l.Id,
Reference = l.Reference,
OwnerId = l.OwnerId,
Sales = l.Sales.Where(a => a.Owner.Id == userId || a.Manager.Id == userId),
Products = l.Products,
Status = l.Status,
DueDate = l.DueDate
}).ToListAsync();
return await result;
}