如何在LINQ查询中使用这个类扩展?
本文关键字:扩展 LINQ 查询 | 更新日期: 2023-09-27 18:12:04
如何在我的LINQ查询中使用这个类扩展?我得到错误:
方法的系统。DateTime AddBusinessDays(系统。日期时间,Int32)' has不支持SQL转换
var CProcess = (from m in DataContext.csrcallds
let scheddt = FluentDateTime.DateTimeExtensions.AddBusinessDays((DateTime)m.scheduledon, 2)
where m.scheduledon >= earliestDate
&& m.scheduledon <= objdate1.DateStart
&& m.calltype == "CHQRUN"
&& (SqlMethods.DateDiffDay(scheddt, m.completedon) > 2)
group m by new { m.scheduledon.Value.Year, m.scheduledon.Value.Month } into p
orderby p.Key.Year ascending, p.Key.Month ascending
select new Date1()
{
theDate = DateTime.Parse($"{p.Key.Month} - {p.Key.Year}"),
theCount = p.Count(),
theString = $"{p.Key.Month} - {p.Key.Year}"
});
我使用的方法:https://stackoverflow.com/a/1379158/6157660
您正在得到正确的响应,因为没有该名称的SQL函数,如果您的查询尚未具体化,linq to SQL将尝试将所有语句转换为SQL语句,当然您的扩展函数不能转换。
您可以将函数添加到sql本身的实例中,或者先实现查询,而不是调用内存中的数据。
如果表单支持,还可以在sql中创建包含函数功能的存储过程,然后通过表单调用该存储过程。
我是这样做的:
var CProcess = (from m in DataContext.csrcallds.AsEnumerable()
where m.scheduledon >= earliestDate
&& m.scheduledon <= objdate1.DateStart
&& m.calltype == "CHQRUN"
&& (SqlMethods.DateDiffDay(FluentDateTime.DateTimeExtensions.AddBusinessDays((DateTime)m.scheduledon, 2), m.completedon) > 2)
group m by new { m.scheduledon.Value.Year, m.scheduledon.Value.Month } into p
orderby p.Key.Year ascending, p.Key.Month ascending
select new Date1()
{
theDate = DateTime.Parse($"{p.Key.Month} - {p.Key.Year}"),
theCount = p.Count(),
theString = $"{p.Key.Month} - {p.Key.Year}"
});
我使用. asenumerable(),并在查询中使用该方法。