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
EDIT 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 Core 2.0を含む)。解は射影( 'select')クエリです。 –
こんにちはIvan、投影クエリの例を表示できますか? – user3306290