Код: Выделить всё
var collection = _database.GetCollection(VehiclesCollection);
var aggregation = collection.AsQueryable()
.SelectMany(v => v.VehicleEntries)
.Where(i => Convert.ToInt32(i.PostFlashDTCs) > 0)
.ToList();
В MongoDB.Driver.dll возникло первое случайное исключение типа System.InvalidOperationException
Я думал, что проблема связана с функцию преобразования, поэтому я изменил ее на:
Код: Выделить всё
.Where(i => Convert.ToInt32("1") > 0)
Код: Выделить всё
public class VehicleEntry
{
[BsonElement("PostFlashDTCs")]
[BsonDefaultValue("0")]
public String PostFlashDTCs { get; set; }
}
РЕДАКТИРОВАТЬ
Я написал быстрый цикл for для перебора (после удаления шагаwhere) и печати, если существовала строка, которую нельзя преобразовать в целое число. На консоль ничего не выведено:
Код: Выделить всё
foreach (VehicleEntry vehicle in aggregation1)
{
int result;
if (!Int32.TryParse(vehicle.PostFlashDTCs, out result))
{
Console.WriteLine("Bad value!");
}
}
Я немного ограничил свой запрос, чтобы извлечь из дела в нем было всего 12 элементов VehicleEntry. После этого я установил отладчик (временно удалил регистрwhere) и просмотрел все двенадцать элементов, и все они имели допустимые числовые строки для поля PostFlashDTCs, поэтому проблема заключается в функции преобразования, а не в недопустимой строке.
EDIT 3
Если я не могу использовать Convert.ToInt32 в запрос LINQ, почему он работает нормально когда я жестко закодирую строковое значение? Компилятор делает что-то странное для оптимизации этого кода? Я не знаю о такой оптимизации, но полагаю, что это возможно.
Подробнее здесь: https://stackoverflow.com/questions/348 ... om-mongodb
Мобильная версия