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

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

Сообщение Anonymous »

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

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

var collection = _database.GetCollection(VehiclesCollection);
var aggregation = collection.AsQueryable()
.SelectMany(v => v.VehicleEntries)
.Where(i => Convert.ToInt32(i.PostFlashDTCs) > 0)
.ToList();
< /code>

Однако каждый раз, когда я запускаю это, я получаю следующую ошибку: < /p>


Первое шанс исключение типа 'System.invalidoperationException' произошел в mongodb.driver.dll < /p>
< /blockquote>

Я думал, что проблема связана с преобразовать функцию, поэтому я изменил ее на: < /p>

.Where(i => Convert.ToInt32("1") > 0)
< /code>

И все еще работал нормально. Мой коллега сказал, что это может задушить преобразование строки 0, но когда я хардкод в «0» 
, она все еще работает. По какой -то причине это просто не может преобразовать поле класса. Я установил поле на строку и даже установил для него значение по умолчанию: < /p>

public class VehicleEntry
{
[BsonElement("PostFlashDTCs")]
[BsonDefaultValue("0")]
public String PostFlashDTCs { get; set; }
}
< /code>

Какова причина, по которой он показывает неверное форматхпений, когда я читаю из самого объекта? < /p>

Редактировать < /strong> < /p>

Я написал быстрый для цикла, чтобы итерация через (после того, как сбросил шаг, где есть шаг) и печатать, если была строка, которая не может быть преобразована в целое число. На консоли ничего не было напечатано: < /p>

foreach (VehicleEntry vehicle in aggregation1)
{
int result;
if (!Int32.TryParse(vehicle.PostFlashDTCs, out result))
{
Console.WriteLine("Bad value!");
}
}
< /code>

edit 2 < /strong> < /p>

Я немного ограничил свой запрос, чтобы вытащить из случая У этого было всего 12 элементов транспортного средства. Позже я поместил отладчик (я временно удалил случай, где проходил случай) и прошел все двенадцать элементов, и все они имели действительные числовые строки для поля Postflashdtcs, поэтому проблема заключается в функции преобразования, а не с неверной строкой. .

edit 3 < /strong> < /p>

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

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

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

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

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

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

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