Voy a profundizar un poco porque las funciones definidas por el modelo no son muy conocidas.
Las funciones definidas por el modelo se deben agregar manualmente a la parte CSDL del archivo EDMX. Debe abrir el archivo como XML y agregar una función. Por ejemplo, esta función se define el modelo es capaz de producir el nombre completo del empleado:
<Function Name="FullName" ReturnType="Edm.String">
<Parameter Name="emp" Type="TestModel.Employee" />
<DefiningExpression>
Trim(emp.FirstName) + " " + Trim(emp.LastName)
</DefiningExpression>
</Function>
Ahora usted puede guardar su EDMX y volver al diseñador. La función seguirá presente pero no es visible en el navegador de modelos. Puede actualizar su modelo desde la base de datos o eliminar todas sus entidades, pero la función aún estará definida. EF no elimina la modificación personalizada en la parte CSDL de EDMX.
Ahora necesita definir la función .NET para poder usar esta función definida por el modelo. Puedes hacerlo en cualquier lugar. Una forma es utilizar la clase parcial de contexto, pero en el mismo tiempo, puedes usar alguna clase cutom:
public static class EdmFunctions
{
[EdmFunction("TestModel", "FullName")]
public static string FullName(Employee e)
{
throw new NotSupportedException("This function is only for L2E query.");
}
}
y ya está. La tarea sólo restante está utilizando la función de consulta LINQ-a-entidades:
using (var context = new TestEntities())
{
var query = from e in context.Employees
select new
{
e.Id,
FullName = EdmFunctions.FullName(e)
};
var data = query.ToList();
...
}
funciones definidas por el modelo son sólo algunas reutilizable Entity SQL que se traduce a SQL para que puedan ser utilizado en las consultas LINQ a las entidades . Las funciones definidas por el modelo pueden ser mucho más complicadas.
Gran respuesta: es bueno saber que las funciones definidas por el modelo no se destruyen al actualizar el modelo – BrokenGlass
Como seguimiento, también hay un artículo de MSDN sobre esto: [Cómo: Definir funciones personalizadas en el modelo conceptual (Entidad Framework)] (http://msdn.microsoft.com/en-us/library/dd456812.aspx) –
La respuesta de Joel Mueller a otra pregunta es similar a la que mencionó: es muy exhaustiva y también muestra cómo hacer esto. trabajo para LINQ-to-Objects también: [LINQ to Entities no reconoce el método 'Double Parse (System.String)' método, y este método no se puede traducir a una expresión de tienda] [1] [ 1]: http://stackoverflow.com/a/5971677/35133 –