我有一个标量函数,它接受 2 个参数并返回一个整数。
在 sql 中,我可以通过简单地将函数包含在我的 sql 语句中来调用该函数。 IE
select funcname(dateparamfrom,
dateparamto) as numholidays from table
我的问题是作为 linq 实体框架 8 连接查询的一部分,如何在查询中包含该标量函数调用。
我有 2 个表的 2 个模型类,我可以连接它们,但有问题的查询使用标量函数根据函数的编写方式返回一个数字,EF 8。
Var data from context.dbtbale name
我知道你可以使用 context.sqlquery 方法,但是这是正确的方法吗?
谢谢
您可以使用 EF Core 映射自己的函数。为此,您需要配置您的
DbContext
,例如:
public class MyContext : DbContext
{
// This is a stub method used only by EF
public int GetDayCount(DateTime from, DateTime to)
=> throw new InvalidOperationException();
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// Now map the stub method into a call in the database
modelBuilder
.HasDbFunction(
typeof(MyContext).GetMethod(nameof(GetDayCount),
new[] { typeof(DateTime), typeof(DateTime) })!)
.HasName("NameOfFunctionInDatabase");
base.OnModelCreating(modelBuilder);
}
public DbSet<Meeting> Meetings { get; set; }
}
现在您可以像这样使用该功能:
var result = context.Users
.Where(m => context.GetDayCount(m.From, m.To) > 5)
.ToList();
请参阅文档了解更多详细信息