c# - Entity Framework 6 Code First Funciones personalizadas
linq entity-framework (1)
Estoy intentando algo similar a esto:
¿Cómo utilizar la función de valor escalar con linq to entity?
Sin embargo, no estoy usando EDMX, sino solo DbContext y el código primero.
Me he encontrado con esto:
https://codefirstfunctions.codeplex.com/
Pero el uso no es adecuado. Lo que estoy tratando de lograr es poder hacer esto:
var locations = context.Locations.Where(e => Functions.LatLongDistanceCalc(e.Lat, e.Long, lat, long) >= 10)
Donde llamará a una función escalar (LatLongDistanceCalc) en SQL Server.
¿Hay alguna manera de hacer esto sin usar EDMX? Sé que puede construir una consulta manual, pero esto no sería preferible porque quiero recuperar entidades con proxies de carga diferida, etc., así como construir una consulta más compleja.
Debería poder utilizar una función SQL escalar en sus criterios
Where
con
https://codefirstfunctions.codeplex.com/
Suponiendo que desea asignar la función SQL [dbo]. [LatLongDistanceCalc], y de acuerdo con el conjunto de pruebas :
public class MyDataContext: DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//...
modelBuilder.Conventions.Add(new FunctionsConvention("dbo", this.GetType()));
}
// "CodeFirstDatabaseSchema" is a convention mandatory schema name
// "LatLongDistanceCalc" is the name of your function
[DbFunction("CodeFirstDatabaseSchema", "LatLongDistanceCalc")]
public static int LatLongDistanceCalc(int fromLat, int fromLong,
int toLat, int toLong)
{
// no need to provide an implementation
throw new NotSupportedException();
}
}
el uso sería entonces:
context.Locations
.Where(e => MyDataContext.LatLongDistanceCalc(e.Lat, e.Long, lat, long) >= 10)