entity framework6代码优先自定义函数

我正在尝试类似的东西:

如何使用带有linq的标量值函数实体?

但是我没有使用EDMX,而是先使用DbContext和代码。

我遇到过这个:

https://codefirstfunctions.codeplex.com/

但用法并不合适。 我想要实现的是能够做到这一点:

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

它将在SQL Server上调用标量函数(LatLongDistanceCalc)。

没有使用EDMX有没有办法做到这一点? 我知道你可以构建一个手动查询,但这不会是优先的,因为我想带回具有延迟加载代理等的实体以及构建更复杂的查询。

您应该能够在CodeFirstStoreFunctions的 Where标准中使用标量SQL函数

假设您要映射SQL函数[dbo]。[LatLongDistanceCalc],并根据测试套件 :

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

那么用法是:

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