问题描述
我正在将一个 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)");
我只对提供 startingDate
和 endingDate
参数感兴趣。
我能够通过控制器中的一张桌子加入 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 (将#修改为@)