У меня в mongoDb есть следующая структура документа:
Я хочу запросить его из приложения asp.net C# с помощью linq. Мне нужен отчетливый список всех значений t. Если я запускаю этот код, я получаю список значений t для всех моих документов, а значение t повторяется для всех документов.
var query = from m in collection.AsQueryable()
select m.t;
Поэтому мне нужен отдельный список t. Я изменил свой код следующим образом, но ничего не возвращается и сообщения об ошибке нет.
var query = (from p in collection.AsQueryable()
select p.t).Distinct();
Что я делаю неправильно?
Дело в том, что Distinct()
возвращает IQueryable<T>
, который представляет собой операцию с базой данных. Чтобы материализовать, что вам нужно запустить .ToList()
, остальная часть вашего кода в порядке, попробуйте:
var query = (from p in collection.AsQueryable()
select p.t).Distinct();
var data = query.ToList();
@mickl - спасибо. Есть ли способ ускорить его, поскольку прошло уже больше минуты, а данные все еще заполняются. В моей базе данных более 3 миллионов документов и около 3000 различных значений t.
@Silentbob у вас есть индекс по полю "t"?
@mickl да, я знаю
@Silentbob, тогда я полагаю, вам нужно как-то кэшировать этот отдельный список, возможно, в памяти, может быть, в отдельной коллекции, которую можно периодически пересчитывать
этот ответ на самом деле правильный, BsonDocument уже реализует IEquatable <BsonDocument>