[英]Convert SQL Statement into Linq expression
我對 linq 和 .net 內核很陌生。 作為我最后一年項目的一部分,我正在嘗試計算公司的下一個納稅申報日期。
這就是我在 SQL 中嘗試過的,現在我正在嘗試將此 sql 轉換為 Linq 查詢,我需要一些幫助才能獲得所需的結果。
WITH cte_company (CompanyID, CompanyName, CompanyNumber, IncorporatedDate, TOTAL_YEARS) AS (SELECT CompanyID, CompanyName, CompanyNumber, IncorporatedDate, DATEDIFF(YEAR, IncorporatedDate, CURRENT_TIMESTAMP) AS TOTAL_YEARS FROM tbl_Company) SELECT cte_company.CompanyID, CompanyName, CompanyNumber, IncorporatedDate, TOTAL_YEARS, CASE WHEN TOTAL_YEARS > 1 THEN (SELECT DATEADD(MONTH, 9, MAX(TaxReturnDate)) FROM tbl_Tax WHERE cte_company.CompanyID = tbl_Tax.CompanyID) ELSE DATEADD(MONTH, 18, IncorporatedDate) END AS TaxDate FROM cte_company
Linq查詢
IEnumerable<CompanyTaxInfo> result = from c in this.AcmeDB.tbl_Company let TotalYears = (DateTime.Now - c.IncorporatedDate).Value.Days / 365 let taxReturnDate = this.AcmeDB.tbl_Tax.Max(tx => tx.TaxReturnDate).Value.AddMonths(9) select new CompanyTaxInfo { CompanyID = c.CompanyID, CompanyName= c.CompanyName, CompanyNumber= c.CompanyNumber, IncorporatedDate= c.IncorporatedDate, TotalYears = TotalYears, TaxDate = TotalYears > 1? taxReturnDate: c.IncorporatedDate.Value.AddMonths(21) }; return result;
代碼拋出 DbArithmeticExpression arguments must have a numeric common type。 例外。
請幫忙
嘗試以下查詢:
var query = from c in this.AcmeDB.tbl_Company let TotalYears = EF.Functions.DateDiffYear(c.IncorporatedDate, DateTime.Now) select new CompanyTaxInfo { CompanyID = c.CompanyID, CompanyName = c.CompanyName, CompanyNumber = c.CompanyNumber, IncorporatedDate = c.IncorporatedDate, TotalYears = TotalYears, TaxDate = TotalYears > 1? this.AcmeDB.tbl_Tax.Where(tax => c.CompanyId == tax.CompanyId).Max(tx => tx.TaxReturnDate).Value.AddMonths(9): c.IncorporatedDate.Value.AddMonths(18) }; return query.ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.