我必須計算有子級服務的服務的總費用。 計算在LINQ實體總和的方式是:計算列表父級的子實體的總和
double totalcost = db.Services.Sum(s=>s.cost);
但我怎麼能計算出的清單服務,如總費用:
double totalfee=db.services.childservices.sum(s=>s.fee);
或類似的東西? 我不想使用循環,因爲它需要很長時間,我一次需要計算1000個服務!
我必須計算有子級服務的服務的總費用。 計算在LINQ實體總和的方式是:計算列表父級的子實體的總和
double totalcost = db.Services.Sum(s=>s.cost);
但我怎麼能計算出的清單服務,如總費用:
double totalfee=db.services.childservices.sum(s=>s.fee);
或類似的東西? 我不想使用循環,因爲它需要很長時間,我一次需要計算1000個服務!
我想你的模式是類似以下內容:
public class Service
{
public long Id { get; set; }
public double Cost { get; set; }
public ICollection<ChildService> ChildServices { get; set; }
}
public class ChildService
{
public long Id { get; set; }
public double Fee { get; set; }
}
然後你就可以做到這一點對所有的服務來計算總費用:
double? totalFee = db.Services.Sum(service => service.ChildServices.Sum(child => (double?)child.Fee));
的double?
在那裏守衛againt的在數據庫中沒有任何要求的情況下。在這種情況下,結果將是null
。
如果你想對所有服務的總費用清單,你可以:
List<double?> totalFees = db.Services.Select(service => service.ChildServices.Sum(child => (double?)child.Fee)).ToList();
如果你想零,而不是null
,只是替換上面查詢:
double totalFee = db.Services.Sum(service => service.ChildServices.Sum(child => (double?)child.Fee)) ?? 0;
List<double> totalFees = db.Services.Select(service => service.ChildServices.Sum(child => (double?)child.Fee) ?? 0).ToList();
var total = services.SelectMany(q => q.ChildServices).Distinct().Sum(p => p.Fee);
var childFeeSum=from parentService in db.Services select new { Fee=parentService.Sum(parent=>parent.ChildServices.Sum(f=>f.Fee))};
你可以使用加入 –
你能告訴我加入我的場景嗎?我使用DMBL和db是datacontext。 db.Services.Join(??? childservice) –
Table descirption和接受的輸出指定 –