Преобразование String в Int в EF 4.0

Есть ли способ сделать это вообще? У меня есть строковое поле в БД, и я хочу проанализировать его в свойстве int в моем запросе LINQ (да, он должен быть на уровне IQueryable, а не в памяти).

Я знаю, что 2 года назад EF 1.0 не смог этого сделать (хотя LINQ to SQL поддерживал эту базовую функциональность из коробки) … но мне просто интересно, если кто-нибудь придумал способ сделать это в этот момент ?

Пользовательские сопоставления функций? Специальный синтаксис? Вообще ничего….

ОБНОВИТЬ:

Я попробовал определенную модель следующим образом:

   CAST(v AS INT)   [EdmFunction("Model.Repository", "ConvertToInt32")] public static int ConvertToInt32(string value) { throw new InvalidOperationException("Only valid when used as part of a LINQ query."); } 

но он, похоже, не работает. Я получаю исключение во время выполнения:

  ErrorDescription=Type 'INT' could not be found. Make sure that the required schemas are loaded and that the namespaces are imported correctly. StackTrace: at System.Data.Common.EntitySql.SemanticAnalyzer.ConvertTypeName(Node typeName, SemanticResolver sr) at System.Data.Common.EntitySql.SemanticAnalyzer.ConvertTypeExprArgs(BuiltInExpr astBuiltInExpr, SemanticResolver sr) at System.Data.Common.EntitySql.SemanticAnalyzer.b__73(BuiltInExpr bltInExpr, SemanticResolver sr) at System.Data.Common.EntitySql.SemanticAnalyzer.ConvertBuiltIn(Node astExpr, SemanticResolver sr) at System.Data.Common.EntitySql.SemanticAnalyzer.Convert(Node astExpr, SemanticResolver sr) at System.Data.Common.EntitySql.SemanticAnalyzer.ConvertValueExpression(Node astExpr, SemanticResolver sr) at System.Data.Common.EntitySql.SemanticAnalyzer.ConvertQueryStatementToDbExpression(Statement astStatement, SemanticResolver sr) at System.Data.Common.EntitySql.SemanticAnalyzer.AnalyzeQueryCommand(Node astExpr) at System.Data.Common.EntitySql.CqlQuery.b__8(SemanticAnalyzer analyzer, Node astExpr) at System.Data.Common.EntitySql.CqlQuery.AnalyzeSemanticsCommon[TResult](Node astExpr, Perspective perspective, ParserOptions parserOptions, IEnumerable`1 parameters, IEnumerable`1 variables, Func`3 analysisFunction) at System.Data.Common.EntitySql.CqlQuery.AnalyzeQueryExpressionSemantics(Node astQueryCommand, Perspective perspective, ParserOptions parserOptions, IEnumerable`1 parameters, IEnumerable`1 variables) at System.Data.Common.EntitySql.CqlQuery.c__DisplayClass4.b__3(Node astCommand, ParserOptions validatedParserOptions) at System.Data.Common.EntitySql.CqlQuery.CompileCommon[TResult](String commandText, Perspective perspective, ParserOptions parserOptions, Func`3 compilationFunction) at System.Data.Common.EntitySql.CqlQuery.CompileQueryCommandLambda(String queryCommandText, Perspective perspective, ParserOptions parserOptions, IEnumerable`1 parameters, IEnumerable`1 variables) at System.Data.Mapping.ViewGeneration.Utils.ExternalCalls.CompileFunctionDefinition(String functionFullName, String functionDefinition, IList`1 functionParameters, EdmItemCollection edmItemCollection) at System.Data.Metadata.Edm.EdmItemCollection.GenerateFunctionDefinition(EdmFunction function) at System.Data.Common.Utils.Memoizer`2.c__DisplayClass2.b__0() at System.Data.Common.Utils.Memoizer`2.Result.GetValue() at System.Data.Common.Utils.Memoizer`2.Evaluate(TArg arg) at System.Data.Metadata.Edm.EdmItemCollection.GetGeneratedFunctionDefinition(EdmFunction function) at System.Data.Metadata.Edm.MetadataWorkspace.GetGeneratedFunctionDefinition(EdmFunction function) at System.Data.Query.PlanCompiler.ITreeGenerator.Visit(DbFunctionExpression e) InnerException: 

ОБНОВЛЕНИЕ: я получил его для работы следующим образом

     CAST(v AS Edm.Int32)   

Если вы используете EFv4 + EDMX, вы можете создать специальную функцию, определенную моделью, которая будет выполнять CAST для вас. Затем вы можете использовать эту функцию в запросах Linq-to-entities.

  • «Лямбда-выражение с телом оператора не может быть преобразовано в дерево выражений»
  • Entity Framework 4 Single () vs First () vs FirstOrDefault ()
  • Сравнение с регистром LINQ to Entities
  • Зачем использовать LINQ Join для простого отношения «один-много»?
  • Тип узла выражения LINQ «ArrayIndex» не поддерживается в LINQ to Entities
  • LINQ to Entities не распознает метод
  • Возможна ли инъекция через динамический LINQ?
  • Тип одного из выражений в предложении соединения неверен в Entity Framework
  • Как сделать массовую вставку - Linq для объектов
  • «Тип узла выражения LINQ« Invoke »не поддерживается в LINQ to Entities» - тупик!
  • Сколько Include я могу использовать в ObjectSet в EntityFramework для сохранения производительности?
  • Interesting Posts
    Давайте будем гением компьютера.