Невозможно преобразовать строку в int в запросе LINQ из MongoDB.C#

Место общения программистов C#
Ответить
Anonymous
 Невозможно преобразовать строку в int в запросе LINQ из MongoDB.

Сообщение Anonymous »

Итак, я выполняю запрос SelectMany для перебора списков внутри объектов в коллекции. Вот мой запрос:

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

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)
И все равно все работало нормально. Мой коллега сказал, что преобразование строки 0 может захлебнуться, но когда я жестко запрограммировал "0", это все равно работает. По какой-то причине он просто не может преобразовать поле класса. Я установил для поля строку и даже установил для него значение по умолчанию:

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

public class VehicleEntry
{
[BsonElement("PostFlashDTCs")]
[BsonDefaultValue("0")]
public String PostFlashDTCs { get; set; }
}
По какой причине отображается исключение InvalidFormatException при чтении из самого объекта?

РЕДАКТИРОВАТЬ

Я написал быстрый цикл for для перебора (после удаления шагаwhere) и печати, если существовала строка, которую нельзя преобразовать в целое число. На консоль ничего не выведено:

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

foreach (VehicleEntry vehicle in aggregation1)
{
int result;
if (!Int32.TryParse(vehicle.PostFlashDTCs, out result))
{
Console.WriteLine("Bad value!");
}
}
РЕДАКТИРОВАТЬ 2

Я немного ограничил свой запрос, чтобы извлечь из дела в нем было всего 12 элементов VehicleEntry. После этого я установил отладчик (временно удалил регистрwhere) и просмотрел все двенадцать элементов, и все они имели допустимые числовые строки для поля PostFlashDTCs, поэтому проблема заключается в функции преобразования, а не в недопустимой строке.

EDIT 3

Если я не могу использовать Convert.ToInt32 в запрос LINQ, почему он работает нормально когда я жестко закодирую строковое значение? Компилятор делает что-то странное для оптимизации этого кода? Я не знаю о такой оптимизации, но полагаю, что это возможно.

Подробнее здесь: https://stackoverflow.com/questions/348 ... om-mongodb
Ответить

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

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

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

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

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