And*_*ewC 16 c# linq entity-framework entity-framework-6
我正在尝试类似的东西:
但是我没有使用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有没有办法做到这一点?我知道你可以构建一个手动查询,但这不是优先考虑的,因为我想带回具有延迟加载代理等的实体以及构建更复杂的查询.
jbl*_*jbl 30
您应该能够在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)