是否可以在实体框架中调用标量函数?

问题描述 投票:0回答:1

我有一个标量函数,它接受 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 方法,但是这是正确的方法吗?

谢谢

c# sql entity-framework linq linq-to-sql
1个回答
0
投票

您可以使用 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();

请参阅文档了解更多详细信息

© www.soinside.com 2019 - 2024. All rights reserved.