有兩個選項來過濾相關的實體
做一個投影。 不幸的是,當您使用Include
方法時,您無法按照您的意願過濾相關實體。您需要將您的查詢投影到DTO對象或匿名對象,如下例所示。
var query=context.Users.Include(x => x.UserRoles)
.Where(r => r.IsDeleted == IsDeleted)
.Select(u=> new{ ...,
Roles=x => x.UserRoles.Where(y=>!y.IsDeleted)})
第二個選項可以使用Explicitly Loading。但是,如果您可以加載一個特定實體的相關實體,例如。
var user=context.Users.FirstOrDefault(r.IsDeleted == IsDeleted);//Getting a user
context.Entry(user)
.Collection(b => b.UserRoles)
.Query()
.Where(y=>!y.IsDeleted)
.Load();
爲此,您可以按照您第一個查詢獲取每個實體的foreach內,
var query=context.Users.Where(r => r.IsDeleted == IsDeleted);
foreach(var u in query)
{
context.Entry(u)
.Collection(b => b.UserRoles)
.Query()
.Where(y=>!y.IsDeleted)
.Load();
}
,但它的將是真正低效的,因爲你要做一個往返到您的數據庫每個實體。我的建議是使用第一個選項,投影查詢。
不完全確定你想要完成什麼。如果這是一個問題,你可以關閉延遲加載,或者如果這是你想要實現的,你可以加入UserRoles。 – BurnsBA