Я пытаюсь использовать запрос linq, когда я пытаюсь каким-то образом преобразовать значение высоты, я получаю ошибку во время выполнения.

Ошибка:

LINQ to Entities не распознает метод метода Int32 ToInt32 (System.String), и этот метод нельзя преобразовать в выражение хранилища.

Есть ли лучший способ сравнить значение высоты?

case "HeightFrom":
     photosquery = photosquery.Where(x => Convert.ToInt32(x.physical.BodyHeight.TrimEnd()) >= Convert.ToInt32(height));
     break;
1
dotNETEngineer 20 Окт 2017 в 21:24

3 ответа

Лучший ответ

Проблема в том, что используемый вами провайдер Linq (вероятно, из EF) не поддерживает Convert.ToInt32. Быстрое решение этой проблемы - использование метода расширения AsEnumerable для переключения с Linq на Objects

 photosquery = photosquery.AsEnumerale()
                          .Where(x => Convert.ToInt32(x.physical.BodyHeight.TrimEnd()) >= Convert.ToInt32(height));

Теперь, если BodyHeight является строкой и вы сохраняете целое число, я настоятельно рекомендую изменить тип этого столбца, если вы можете. Ваш запрос может быть выполнен полностью на стороне сервера:

int value=Convert.ToInt32(height);
photosquery = photosquery.Where(x => x.physical.BodyHeight >= value);
0
octavioccl 20 Окт 2017 в 18:32

Если ваших данных не много, вы можете использовать

case "HeightFrom": photosquery = photosquery.ToList().Where(x => Convert.ToInt32(x.physical.BodyHeight.TrimEnd()) >= Convert.ToInt32(height)); break;

Но для тяжелых данных это не нормально и сначала загрузите все данные, а затем отфильтруйте их

0
Amirhossein Yari 20 Окт 2017 в 18:45
case "HeightFrom":
 var h = Convert.ToInt32(height);
 photosquery = photosquery.Where(x => Convert.ToInt32(x.physical.BodyHeight.TrimEnd()) >= h);
 break;

EF не знает, как перевести это последнее обращение. Если первый не работает, попробуйте int.parse(x.physical.BodyHeight.TrimEnd()) или прямое приведение (int)x.physical.BodyHeight.TrimEnd()

Если бы это был я, и у меня было время, я бы, вероятно, отобразил эту модель на другую модель с правильными типами данных, прежде чем начать делать запросы.

0
Ryan Bennett 20 Окт 2017 в 18:32