我有一個linq查詢的問題。 我有3個實體: 用戶,目標和結果。 每個用戶可以有多個(或沒有)目標,每個目標可以有多個(或沒有)結果 我想要一個查詢返回所有用戶,包括可能的目標和可能的結果。這很好。但是現在我想包含過濾器來過濾目標和結果。以便查詢只返回符合這些條件的用戶,目標和結果。ef核心linq過濾子實體
public class User
{
public ICollection Targets {get;set;}
public string otherProperty {get;set;}
}
public class Target
{
public ICollection Results {get;set;}
public User user {get;set;}
public string Language {get;set;}
}
public class Result
{
public Target Target {get;set;}
public int score {get;set;}
}
任何EF核心linq專家,可以幫助我嗎?
親切的問候, Robrecht
編輯1
var query =
from auditUser in _auditUserRepository.GetAll().Include(u => u.user)
.WhereIf(!input.Group.IsNullOrWhiteSpace(), u => u.Group == input.Group)
.WhereIf(!input.Filter.IsNullOrWhiteSpace(), u => u.user.FullName.ToLower().Contains(input.Filter.ToLower()))
select auditUser;
var results = query
.Include(u => u.Targets)
.ThenInclude(t => t.AuditResults)
.PageBy(input)
.ToListAsync();
await query
.SelectMany(u => u.Targets)
.WhereIf(!input.Language.IsNullOrWhiteSpace(), t => t.Target == input.Language)
.SelectMany(t => t.AuditResults)
.WhereIf(input.From != null, r => r.CompletionDate >= input.From)
.WhereIf(input.To != null, r => r.CompletionDate <= input.From)
.LoadAsync();
這是我有這樣的,但它有2個問題:
- 當有一個沒有結果,目標不包括在內。它似乎包含或包含創建內連接而不是左連接。
- 這不會篩選語言或日期。
可以顯示您當前的查詢和一些示例過濾條件嗎? –
如果你的意思是過濾包括,他們從來沒有在EF支持,但仍然不(包括最新的EF核心2.0)。解決方案是投影('select')查詢。 –
嗨伊凡,你能展示一個投影查詢的例子嗎? – user3306290