title: Convert String to Int in EF 4.0
body: <p>Is there any way of doing this at all? I have a string field in the DB and I want to parse it into a int property in my LINQ query (yes, it must be at the IQueryable level, not in memory).</p>
  
  <p>I know 2 years ago EF 1.0 couldn't do this (even though LINQ to SQL supported this basic functionality out of the box)...but I'm just wondering if anyone has come up with a way of doing this at this point? </p>
  
  <p>Custom function mappings? Special syntax? Anything at all....</p>
  
  <p>UPDATE:</p>
  
  <p>I tried a model defined function as follows:</p>
  
  <pre><code>    &lt;Function Name="ConvertToInt32" ReturnType="Edm.Int32"&gt;
        &lt;Parameter Name="v" Type="Edm.String" /&gt;
        &lt;DefiningExpression&gt;
          CAST(v AS INT)
        &lt;/DefiningExpression&gt;
      &lt;/Function&gt;
  
      [EdmFunction("Model.Repository", "ConvertToInt32")]
      public static int ConvertToInt32(string value)
      {
          throw new InvalidOperationException("Only valid when used as part of a LINQ query.");
      }
  </code></pre>
  
  <p>but it doesn't seem to work. I get the runtime exception:</p>
  
  <pre><code>        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.&lt;CreateBuiltInExprConverter&gt;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.&lt;AnalyzeQueryExpressionSemantics&gt;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.&lt;&gt;c__DisplayClass4.&lt;CompileQueryCommandLambda&gt;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.&lt;&gt;c__DisplayClass2.&lt;Evaluate&gt;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: 
  </code></pre>
  
  <p>UPDATE: I got it to work as follows</p>
  
  <pre><code> &lt;Function Name="ConvertToInt32" ReturnType="Edm.Int32"&gt;
        &lt;Parameter Name="v" Type="Edm.String" /&gt;
        &lt;DefiningExpression&gt;
          CAST(v AS Edm.Int32)
        &lt;/DefiningExpression&gt;
      &lt;/Function&gt;
  </code></pre>