简体   繁体   English

LINQ:使用 Linq 连接多个表列并从子表值中找到聚合总和

[英]LINQ: join multiple Table Column using Linq and find aggregated sum from child table values

I'm using Linq (code-first approach) query to retrieve the data from DB and couldn't able to get similar result while using below linq query:我正在使用 Linq(代码优先方法)查询从数据库中检索数据,但在使用以下 linq 查询时无法获得类似的结果:

from msi in db.MainSaleInvoiceTbls
join dsi in db.DetialSaleInvoiceTbls on msi.Id equals dsi.MainSaleInvoiceId
join ca in db.CustomerAccounts on msi.CustomerId equals ca.Id
join cg in db.MiscLists on ca.CustomerGroupId equals cg.Id 
where msi.IsActive == true && msi.CompanyId == UniversalInfo.UserCompany.Id && msi.MainSaleInvoiceDataType == MainSaleInvoiceType.SOInvoice
group msi by new { dsi,msi.Date,msi.FinancialVoucher,msi.SaleOrderPrefix,msi.SaleOrderNumber,msi.SalesId,ca.CustomerName,ca.AccountCode,cg.Name }
into mainSaleInvoice
from dx in mainSaleInvoice.DefaultIfEmpty()
// orderby main.Id
select new
{
     Date = mainSaleInvoice.Key.Date,
     Voucher = mainSaleInvoice.Key.FinancialVoucher,
     InvoiceAccount = mainSaleInvoice.Key.AccountCode,
     CustomerName = mainSaleInvoice.Key.CustomerName,
     CustomerGroup = mainSaleInvoice.Key.Name,
     Invoice = mainSaleInvoice.Key.SaleOrderPrefix + mainSaleInvoice.Key.SaleOrderNumber,
     PurchaseOrder = mainSaleInvoice.Key.SalesId,
     SalesTax = "",
     InvoiceAmount = mainSaleInvoice.Sum(x => (Double)(mainSaleInvoice.Key.Quantity * mainSaleInvoice.Key.UnitPrice))
     }).ToList() 

In linq, i need to get shortdatetimeString() and sum() of (unitprice* quantity) from child table DetialSaleInvoiceTbls being new in query writing, I don't know where and what I'm doing wrong.在 linq 中,我需要从子表DetialSaleInvoiceTbls 中获取(单位价格*数量)的shortdatetimeString()sum()在查询写作中是新的,我不知道我在哪里做错了什么。 Any suggestions would be much appreciated.任何建议将不胜感激。

 var list=from msi in db.MainSaleInvoiceTbls
          join dsi in db.DetialSaleInvoiceTbls on msi.Id equals dsi.MainSaleInvoiceId
          join ca in db.CustomerAccounts on msi.CustomerId equals ca.Id
          join cg in db.MiscLists on ca.CustomerGroupId equals cg.Id into a
          where msi.IsActive == true && msi.CompanyId == UniversalInfo.UserCompany.Id 
          && msi.MainSaleInvoiceDataType == MainSaleInvoiceType.SOInvoice
          from cg in a.DefaultIfEmpty()
          select new
          {mainSaleInvoice.Date, 
           mainSaleInvoice.FinancialVoucher,mainSaleInvoice.AccountCode,
           mainSaleInvoice.CustomerName,mainSaleInvoice.Name,
           mainSaleInvoice.SaleOrderPrefix, mainSaleInvoice.SaleOrderNumber,
           mainSaleInvoice.SalesId, }).sum(x=>x. (mainSaleInvoice.Quantity * 
           mainSaleInvoice.UnitPrice)).groupby msi new 
          {msi.Date,msi.FinancialVoucher,msi.SaleOrderPrefix,msi.SaleOrderNumber,
           msi.SalesId};


          Date = mainSaleInvoice.Date;
          Voucher = mainSaleInvoice.FinancialVoucher;
          InvoiceAccount = mainSaleInvoice.AccountCode;
          CustomerName = mainSaleInvoice.CustomerName;
          CustomerGroup = mainSaleInvoice.Name;
          Invoice = mainSaleInvoice.SaleOrderPrefix + 
          mainSaleInvoice.SaleOrderNumber;
          PurchaseOrder = mainSaleInvoice.SalesId;
          SalesTax = "";
          InvoiceAmount =list;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM