簡體   English   中英

將 SQL 語句轉換為 Linq 表達式

[英]Convert SQL Statement into Linq expression

我對 linq 和 .net 內核很陌生。 作為我最后一年項目的一部分,我正在嘗試計算公司的下一個納稅申報日期。

  1. 如果有一個新成立的公司還沒有納稅(意味着稅表中沒有條目),則在公司成立日期上增加18個月。
  2. 如果公司已經繳納了稅款,則從稅表中選擇最晚的日期 TaxReturnDate 並添加 9 個月以獲得下一個 TaxReturnDate。

這就是我在 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM