У меня возникли проблемы с попыткой сопоставить строковый столбец в базе данных с целым числом в моем приложении.Код первый Функции магазина в собственности
У меня есть база данных с коллекцией транспортных средств, когда таблица была создана, столбец года был указан как varchar. Мне нужно значение как целое число для выполнения расчетов с ним.
Я знаю, что могу использовать int.Parse, чтобы преобразовать его, но мне нужно, чтобы он работал в запросе фреймворка сущности. int.Parse не поддерживается в linq для сущностей, поэтому этот метод отсутствует.
Следующее, что я пробовал, - это создание представления и литье столбца в int. Это работало отлично, пока мне не пришлось писать в базу данных, тогда возникает ошибка, потому что представление содержит производное поле.
Что я пытался использовать в дальнейшем, используя библиотеку EntityFramework.CodeFirstStoreFunctions от Pawel Kadluczka. Это делает работу, но только тогда, когда я указываю его непосредственно, как это:
Store.Vehicles.Where(x => CustomSqlFunctions.ParseInt(x.ModelYear) == 2000)
Где ParseInt определяется в C#, как
[CodeFirstDbFunction("ParseInt")]
public static int ParseInt(string number) {
throw new NotSupportedException("Direct calls are not supported.");
}
Функция ParseInt в SQL просто вызывает cast(@p1 as int)
где @ p1 является принятый в строка.
Мой вопрос:
Можно ли позвонить CustomSqlFunctions.ParseInt(ModelYear)
из объекта в классе Vehicle ?.
Я попытался это:
public int? Year {
get { return CustomSqlFunctions.ParseInt(ModelYear); }
set { ModelYear = value.ToString(); }
}
, но я получаю ошибку, что год не поддерживается в LINQ для лиц
К сожалению, это не сработает в моей ситуации, потому что int.Parse (и int.TryParse) нельзя перевести на функцию sql, которая будет использоваться в Linq для Entities. –