MongoDB LINQ аварийно завершает работу при использовании Aggregate на AndroidC#

Место общения программистов C#
Ответить
Anonymous
 MongoDB LINQ аварийно завершает работу при использовании Aggregate на Android

Сообщение Anonymous »

У меня есть база данных MongoDB в Atlas, в которой хранятся сведения о прочитанных мной книгах. Есть две коллекции: авторская и книжная.

Код: Выделить всё

[BsonIgnoreExtraElements]
public class Author
{
[BsonId][BsonRepresentation(BsonType.ObjectId)] public ObjectId _id { get; set; }
[BsonElement("first")] public string? first { get; set; }
[BsonElement("last")] public string? last { get; set; }
[BsonElement("author_id")] public BsonInt32? author_id { get; set; }
[BsonElement("FullName")][BsonIgnoreIfNull] public string? FullName { get; set; }

}

[BsonIgnoreExtraElements]
public class Book
{
[BsonId][BsonRepresentation(BsonType.ObjectId)] public ObjectId _id { get; set; }
[BsonElement("title")] public string? title { get; set; }
[BsonElement("title_id")] public BsonInt32? title_id { get; set; }
[BsonElement("author")] public string? author { get; set; }
[BsonElement("issue_date")] public string? issue_date { get; set; }
[BsonElement("return_date")] public string? return_date { get; set; }
}
Насчитывается 485 авторов и 1452 книги. База данных предоставляет данные для приложения Android, созданного с использованием MAUI. На одной из страниц представлен список авторов, книг которых больше всего в базе данных. При этом используется групповой запрос LINQ.

Код: Выделить всё

public async Task GetPopular()
{
IMongoQueryable? query = (from book in booksCollection.AsQueryable()
group book by book.author into g
let lastBook = g.OrderByDescending(b => b.return_date).FirstOrDefault()
select new Popular
{
Author = g.Key,
Count = g.Count(),
ReturnDate = lastBook.return_date,
Title = lastBook.title
}).OrderByDescending(g => g.Count).ThenBy(g => g.Author).Take(10);
List? popular = await query.ToListAsync();
return popular;
}
В большинстве случаев это работает правильно и создает список. Однако при случайном выполнении запроса query.ToListAsync происходит сбой.

Код: Выделить всё

**MongoDB.Driver.Linq.Linq3Implementation.Ast.Optimizers.AstGroupingPipelineOptimizer+UnableToRemoveReferenceToElementsException:**
'Exception of type 'MongoDB.Driver.Linq.Linq3Implementation.Ast.Optimizers.AstGroupingPipelineOptimizer+UnableToRemoveReferenceToElementsException' was thrown.'
Я использую Visual Studio 17.11.4 с MongoDB.Driver 2.9, в котором по умолчанию используется LINQ 3. Есть ли простой способ преобразовать запрос для использования Builders или BsonDocument или в LINQ, который я использовал, есть ошибка?

Подробнее здесь: https://stackoverflow.com/questions/790 ... on-android
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»