在 EF Core 5.0 中使用表值函数

问题描述

我正在将一个 Asp.Net MVC 项目从 .Net 2.2 迁移到 .Net 5.0。

最后一个绊脚石是让表值函数与 EF Core 5 一起使用。

在 EF Core 2.2 中,语法是:

public IQueryable<OutOfService> UnitOutOfService(DateTime startingDate,DateTime endingDate) =>
Query<OutOfService>().Fromsql($"SELECT * FROM UnitOutofServiceView(NULL,1,'1,2,3,4,6',{startingDate},{endingDate},0)");

我只对提供 startingDateendingDate 参数感兴趣。

我能够通过控制器中的一张桌子加入 TVF:

model = await (
    from v in context.Vehicles
        join r in context.UnitOutOfService(DateTime.Now.Date,DateTime.Now.Date) on v.ID equals r.ID into loj
        from rs in loj.DefaultIfEmpty()
    where v.Schedule == true && v.Suspend == false
    orderby v.Name
    select new Indexviewmodel
    {
        ID = v.ID,Name = v.Name,...
        ServiceDescription = rs.Description
    }
).ToListAsync();

很遗憾,我无法在 EF Core 5.0 中使用它。

我已经在 ApplicationDbContext 类中定义了 TVF:

public IQueryable<OutOfService> UnitOutOfService(string sns,int expectedversion,string Site,bool UnitHistory,DateTime HistoryStartDate,DateTime HistoryDateEnd,int DaysOutMin,bool InServiceUnits,bool NotSowFromrO)
            => FromExpression(() => UnitOutOfService(null,"1,6",false,HistoryStartDate,HistoryDateEnd,false));

认”,参数值在控制器中似乎没有任何影响,所以我再次提供它们:

return await (
    from v in _context.Vehicles
    join r in _context.UnitOutOfService(DateTime.Now.Date,DateTime.Now.Date) on v.VehicleID equals r.UnitNumber into loj
    join r in _context.UnitOutOfService(null,today,false) on v.VehicleID equals r.UnitNumber into loj
    from rs in loj.DefaultIfEmpty()
    orderby v.Name
    select new Indexviewmodel
    {
        ID = v.ID,...
        ServiceDescription = rs.Description
    }
).ToArrayAsync();

运行控制器的代码会产生大量错误

我错过了什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)