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

时间:2016-10-06 14:44:43

标签: c# linq asp.net-mvc-5

如何在LINQ查询中使用此类扩展。 我收到错误:

  

方法'System.DateTime AddBusinessDays(System.DateTime,Int32)'具有   没有支持的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

2 个答案:

答案 0 :(得分:2)

您正在获得正确的响应,因为该名称没有SQL函数,如果您的查询尚未实现,linq to sql将尝试将您的所有语句转换为sql语句,当然您的扩展函数可以&# 39;转换。

您可以将函数添加到您的sql实例本身或首先实现查询,而不是在内存中调用您的数据函数。

此外,如果你的orm支持它,你可以在sql中创建一个包含你的函数功能的存储过程,然后通过orm调用存储过程。

答案 1 :(得分:-1)

我这样做了:

let bundle = Bundle(for: type(of: self))
    if let theURL = bundle.url(forResource: "response", withExtension: "json") {
        do {
            let data = try Data(contentsOf: theURL)
            if let parsedData = try? JSONSerialization.jsonObject(with: data) as! [String:Any] {
                grok(parsedData)
            }
        } catch {
            print(error)
        }
    }

我使用了.AsEnumerable(),并在查询中使用了该方法。