C# 其他信息:LINQ to Entities无法识别该方法,并且无法将该方法转换为存储表达式

C# 其他信息:LINQ to Entities无法识别该方法,并且无法将该方法转换为存储表达式,c#,entity-framework,linq,C#,Entity Framework,Linq,我正在尝试从DB获取信息,当我获取信息时,我收到以下错误: EntityFramework.SqlServer.dll中发生类型为“System.NotSupportedException”的异常,但未在用户代码中处理 其他信息:LINQ to Entities无法识别方法“Double GetBalance(Int32,Double,Double)”方法,并且无法将此方法转换为存储表达式 代码如下: public Model GetData(int saleId) { usin

我正在尝试从DB获取信息,当我获取信息时,我收到以下错误:

EntityFramework.SqlServer.dll中发生类型为“System.NotSupportedException”的异常,但未在用户代码中处理

其他信息:LINQ to Entities无法识别方法“Double GetBalance(Int32,Double,Double)”方法,并且无法将此方法转换为存储表达式

代码如下:

public Model GetData(int saleId)
{
        using (var context = new ABCD())
        {
            var data = context.MY_TABLE
                .Where(w => w.ID == saleId)
                .Select(s => new Model
                {
                    ClinicId = s.CLINIC_ID,
                    PatientId = s.PATIENT_ID,
                    Date = s.DOS,
                    ProductBalance = GetBalance(s.ID, (double)s.TOTAL_PRICE, (double)s.TAX_PERCENTAGE),
                })
                .First();

            return data;
        }
}
“GetBalance()”函数在我的代码的其他部分中有更多的使用,但我没有遇到任何问题。这就是功能:

public double GetBalance(int saleId, double TotalCharge, double TaxPercent) {
        var ChargeWithTax = Math.Round((TotalCharge + ((TaxPercent / 100) * TotalCharge)), 2);
        var PaymentWriteOff = Math.Round(GetPayments(saleId) + GetTotalWriteOff(saleId), 2);
        return Math.Floor((ChargeWithTax - PaymentWriteOff) * 100) / 100;
    }

有什么帮助吗?谢谢

提供程序无法识别您的本地方法
GetBalance
,无法将其转换为原始SQL

您可以获取普通数据库对象,并在本地使用本地方法创建本地对象:

var s = context.MY_TABLE.First(w => w.ID == saleId);

var data = new Model()
{
    ClinicId = s.CLINIC_ID,
    PatientId = s.PATIENT_ID,
    Date = s.DOS,
    ProductBalance = GetBalance(s.ID, (double)s.TOTAL_PRICE, (double)s.TAX_PERCENTAGE)
};

return data;

在LINQ中调用IQueryable中的方法是一种非常糟糕的做法

您尝试调用方法
GetBalance()
。我们不能那样做


如需更详细的解释,请阅读

缺失的
,是否可能使用