如何在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

如何在LINQ查询中使用这个类扩展?

您正在得到正确的响应,因为没有该名称的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(),并在查询中使用该方法。