LINQ 列中的方法调用

本文关键字:方法 调用 LINQ | 更新日期: 2023-09-27 18:32:19

我有以下 LINQ 查询:

//myRepository.GetClients(); returns an IQueriable<>
        var AllClients = myRepository.GetClients();

        var ClientReports = from c in FirmECFIs
                         select new ClientReport
                        {
                            FirmSerialNumber = c.SerialNumber,
                            FirmName = c.Name,
                            Year = c.Year,
                            Month = c.Month,
                            CustID = c.CustID,
                            TotalCount =myRepository.GetCount(c.SerialNumber, billingYear, billingMonth),
                            TotalPrice = "0"
                        };

我收到一个错误,上面写着"...不支持转换为 SQL"在我从 TotalCount 列中删除方法调用并分配一个静态值的地方,它工作正常。看起来 LINQ 无法将方法调用转换为 tSQL

谁能帮我解决这个问题?

谢谢

GetCount() 方法的来源:

        public int GetCount(int SerialNumber, string billingYear, string billingMonth)
    {
        var Count = CreateDataContext().myView.Where(c => c.SerialNumber == SerialNumber)
            .Where(c => c.Year == Convert.ToInt32(billingYear)).Where(c => c.Month == Convert.ToInt32(billingMonth));
        return Count.ToList().Count;

LINQ 列中的方法调用

你的仓库在这里并没有很好地完成它的工作 - 事实上,它似乎是一个非常泄漏的抽象,充其量对你没有多大帮助(因为你仍然在仓库之外查询)。

一种方法是将GetClientReports的方法引入存储库,从而为您生成此结果。假设这只是 Linq 到 Sql 下面的,你可以只使用嵌套查询或在该级别加入。

您可以在该行中执行另一个 SQL/LINQ 查询,但不能调用另一个 C# 函数。它不能将其转换为SQL。