C# 实体框架6代码优先自定义函数

C# 实体框架6代码优先自定义函数,c#,linq,entity-framework,entity-framework-6,C#,Linq,Entity Framework,Entity Framework 6,我正在尝试类似的方法: 但是,我没有使用EDMX,而是先使用DbContext和代码 我遇到过这样的情况: 但是这种用法并不合适。我试图实现的是能够做到这一点: var locations = context.Locations.Where(e => Functions.LatLongDistanceCalc(e.Lat, e.Long, lat, long) >= 10) 它将在SQL Server上调用标量函数(LatLongDistanceCalc) 有没有办法不用EDM

我正在尝试类似的方法:

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

我遇到过这样的情况:

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

var locations = context.Locations.Where(e => Functions.LatLongDistanceCalc(e.Lat, e.Long, lat, long) >= 10)
它将在SQL Server上调用标量函数(LatLongDistanceCalc)


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

你应该能够在
标准中使用标量SQL函数

假设您要映射SQL函数[dbo].[LatLongDistanceCalc],并根据:

然后,使用情况将是:

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

我不确定我怎么没有早点得到这个,但是这个100%有效。谢谢你!我想补充一点,如果您在select/context中,那么这是有效的。如果你在它之外-它不会工作。我一直试图用我创建的Max函数来使用它,没有输入参数,到目前为止还没有成功。“我总是得到NotSupportedException。@yopez83您应该发布一个问题,其中包含问题的详细信息,以便有人能帮助您。我有一个问题,这个答案不支持这种情况。类似这样的sql:从表中选择id dbo.fnecrypt(seller,'key123')作为seller,其中dbo.fnecrypt(seller,'key123')类似于'%seller name%',fnecrypt的第一个参数是varbinary(max),它的结果使用sql server加密算法,类的seller属性是string。
context.Locations
       .Where(e => MyDataContext.LatLongDistanceCalc(e.Lat, e.Long, lat, long) >= 10)