subconsultas inner framework first linq entity-framework entity-framework-4 linq-to-entities

first - linq inner join c# entity framework



Convertir cadena a Int en EF 4.0 (1)

¿Hay alguna forma de hacer esto? Tengo un campo de cadena en la base de datos y quiero analizarlo en una propiedad int en mi consulta LINQ (sí, debe estar en el nivel IQueryable, no en la memoria).

Sé que hace 2 años, EF 1.0 no podía hacer esto (aunque LINQ to SQL admitía esta funcionalidad básica fuera de la caja) ... pero me pregunto si alguien ha encontrado una forma de hacerlo en este momento. ?

¿Mapeos de funciones personalizados? ¿Sintaxis especial? Nada en absoluto....

ACTUALIZAR:

Probé una función de modelo definido de la siguiente manera:

<Function Name="ConvertToInt32" ReturnType="Edm.Int32"> <Parameter Name="v" Type="Edm.String" /> <DefiningExpression> CAST(v AS INT) </DefiningExpression> </Function> [EdmFunction("Model.Repository", "ConvertToInt32")] public static int ConvertToInt32(string value) { throw new InvalidOperationException("Only valid when used as part of a LINQ query."); }

pero no parece funcionar. Me sale la excepción de tiempo de ejecución:

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.<CreateBuiltInExprConverter>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.<AnalyzeQueryExpressionSemantics>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.<CompileQueryCommandLambda>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.<Evaluate>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:

ACTUALIZACIÓN: Tengo que trabajar de la siguiente manera

<Function Name="ConvertToInt32" ReturnType="Edm.Int32"> <Parameter Name="v" Type="Edm.String" /> <DefiningExpression> CAST(v AS Edm.Int32) </DefiningExpression> </Function>