Fel*_*lix 5 linq sql-server entity-framework-core asp.net-core-mvc-2.0
我看到EF Core 2具有EF.Functions属性EF Core 2.0公告 which can be used by EF Core or providers to define methods that map to database functions or operators so that those can be invoked in LINQ queries.它包括发送到数据库的LIKE方法.
但我需要一个不同的方法,SOUNDEX(),不包括在内.如何编写这样一种方法,将函数传递给数据库,方法DbFunction属性在EF6中执行?或者我需要等待MS实施它?从本质上讲,我需要生成类似的东西
SELECT * FROM Customer WHERE SOUNDEX(lastname) = SOUNDEX(@param)
Run Code Online (Sandbox Code Playgroud)
添加新的标量方法EF.Functions很简单 - 您只需在DbFunctions类上定义扩展方法.但是,提供SQL转换很困难,需要深入研究EFC内部.
但是,EFC 2.0还引入了一种更简单的方法,在EF Core 2.0文档主题的新功能的数据库标量函数映射部分中进行了解释.
根据这个,最简单的方法是在DbContext派生类中添加一个静态方法,并用DbFunction属性标记它.例如
public class MyDbContext : DbContext
{
// ...
[DbFunction("SOUNDEX")]
public static string Soundex(string s) => throw new Exception();
}
Run Code Online (Sandbox Code Playgroud)
并使用这样的东西:
string param = ...;
MyDbContext db = ...;
var query = db.Customers
.Where(e => MyDbContext.Soundex(e.LastName) == MyDbContext.Soundex(param));
Run Code Online (Sandbox Code Playgroud)
您可以在不同的类中声明此类静态方法,但是您需要使用HasDbFunction流畅的API 手动注册它们.
| 归档时间: |
|
| 查看次数: |
2026 次 |
| 最近记录: |