向EF.Function添加新的标量方法很简单 – 您只需在DbFunctions类上定义扩展方法.但是,提供SQL转换很困难,需要深入研究EFC内部.
但是,EFC 2.0还引入了一种更简单的方法,在New features in EF Core 2.0文档主题的数据库标量函数映射部分中进行了解释.
根据这一点,最简单的方法是在DbContext派生类中添加一个静态方法,并用DbFunction属性标记它.例如.
public class MyDbContext : DbContext
{
// ...
[DbFunction("SOUNDEX")]
public static string Soundex(string s) => throw new NotSupportedException();
}
并使用这样的东西:
string param = ...;
MyDbContext db = ...;
var query = db.Customers
.Where(e => MyDbContext.Soundex(e.LastName) == MyDbContext.Soundex(param));
您可以在不同的类中声明此类静态方法,但是您需要使用HasDbFunction fluent API手动注册它们.