Entidade Estrutura 6 Código Primeiro Funções Personalizadas

Estou tentando algo parecido com isso:

Como usar a function com valor escalar com linq para entidade?

No entanto, não estou usando o EDMX, mas sim apenas DbContext e código primeiro.

Eu me deparei com isso:

https://codefirstfunctions.codeplex.com/

Mas o uso não é adequado. O que estou tentando alcançar é poder fazer isso:

var locations = context.Locations.Where(e => Functions.LatLongDistanceCalc(e.Lat, e.Long, lat, long) >= 10) 

Onde ele chamará uma function escalar (LatLongDistanceCalc) no SQL Server.

Existe alguma maneira de fazer isso sem usar o EDMX? Eu sei que você pode construir uma consulta manual, mas isso não seria preferível porque eu quero trazer de volta entidades com preguiçosos carregamento lento etc, bem como construir uma consulta mais complexa.

Você deve ser capaz de usar uma function SQL escalar em seu Where criteria com CodeFirstStoreFunctions

Supondo que você queira mapear a function SQL [dbo]. [LatLongDistanceCalc] e de acordo com o conjunto de testes :

 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(); } } 

o uso seria então:

 context.Locations .Where(e => MyDataContext.LatLongDistanceCalc(e.Lat, e.Long, lat, long) >= 10)