LinQ查询中的呼叫函数



我想对列表中所有产品的价格求和。我在linQ查询中调用了一个函数

Total = t0.TbOfferProducts.Sum(x => Customs.CalculateCurrency(x.TbOffer.Price))

但是它没有认出我的功能我为linQ写了另一个函数,然后调用它。但是linQ不能识别我的函数

错误:LINQ to Entities不能识别'Double Cal_Price(Int32)'方法,并且该方法不能转换为store表达式。

我尝试了其他版本,但没有一个不工作。请帮帮我。

myList = 
(from t0 in DB.TbProducts
where t0.BoActive == true && t0.BoSoftDeleted == false
let price = Cal_Price(t0.InProductId)
select new ProductActivityInfo
{
ID = t0.InProductId,
Name = t0.StProductName,
Code = t0.StProductCode,
Total = price
})
public double Cal_Price(int productId)
{
double  total = 0;
using (MyEntityContext DB = new MyEntityContext())
{
var list = DB.TbOfferProducts.Where(x => x.InProductId == productId);
foreach (var item in list)
{
total += Customs.CalculateCurrency(item.TbOffer.Price);
}
}
return total;
}

EF Core正在尝试构建SQL,但在查询中发现自定义编译方法时失败。正确的客户端Total:

// calculate sum by grouping
var offerPrices =
from op in DB.TbOfferProducts
group op.TbOffer.Price by x.InProductId
select new 
{
ProductId = g.Key,
RawPrice = g.Sum()
};
var result = 
(from t0 in DB.TbProducts
join op in offerPrices on t0.InProductId equals op.ProductId
where t0.BoActive == true && t0.BoSoftDeleted == false
select new ProductActivityInfo
{
ID = t0.InProductId,
Name = t0.StProductName,
Code = t0.StProductCode,
Total = op.RawPrice
})
.ToList();
// correct Total on the client side
result.ForEach(x => x.Total = Customs.CalculateCurrency(x.Total));  

最新更新