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

Форум для тех, кто программирует под Android
Ответить
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 МБ.

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