如何使用 Entity Framework 和 Linq計算所有未開票但應開票 (isBillable) 的 TimeLog 記錄?
dbo.TimeLogs
[Table("TimeLogs")]
public class TimeLogEntity
{
int Id {get; set;}
int IsBillable {get; set;}
...
List<InvoiceEntity> Invoices {get; set;}
}
dbo.發票
[Table("Invoices")]
public class InvoiceEntity
{
int Id {get; set;}
int TimeLogId {get; set;}
bool IsActive {get; set;}
...
TimeLogEntity TimeLog {get; set;}
}
我試過這個但沒有成功:
var numRows = await applicationDbContext.TimeLogs
.Include(t => t.Invoices.Where(i => i.IsActive == true))
.Where(t => t.IsBillable == true && t.IsActive == true && t.Invoices.Count == 0)
.CountAsync();
上面的查詢導致這個 SQL 查詢(見下文),它不檢查發票記錄是否處于活動狀態。我不會計算 IsActive = false 的發票(它們被視為已洗掉)。
SELECT COUNT(*)
FROM [TimeLogs] AS [t]
WHERE (([t].[IsBillable] = CAST(1 AS bit)) AND ([t].[IsActive] = CAST(1 AS bit))) AND ((
SELECT COUNT(*)
FROM [Invoices] AS [i]
WHERE [t].[Id] = [i].[TimeLogId]) = 0)
我正在使用 Microsoft.AspNetCore.Identity.EntityFrameworkCore (6.0.1)
uj5u.com熱心網友回復:
這個應該可以的。請注意,Include僅用于加載相關資料,而不是過濾主要記錄。
var numRows = await applicationDbContext.TimeLogs
.Where(t => t.IsBillable == true && t.IsActive == true
&& !t.Invoices.Where(i => i.IsActive == true).Any())
.CountAsync();
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/405936.html
標籤:
