我遇到linq查询问题。 我有3个实体: 用户,目标和结果。 每个用户可以有多个(或没有)目标,每个目标可以有多个(或没有)结果 我想要一个返回所有用户的查询,包括可能的目标和可能的结果。而且这很有效。但现在我想要包含过滤器来过滤目标和结果。这样查询只返回符合这些条件的用户,目标和结果。
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();
这就是我所拥有的,但它有两个问题:
答案 0 :(得分:0)
我建议您使用所需的属性创建ViewModel类。例如:
ready: function() {
return (this.position.startOffset
&& this.position.endOffset
&& this.position.representation.trim().length >= 0
&& this.text.id
&& this.user.id
&& this.concept);
}
然后在你的&#34;存储库&#34;您可以创建一个方法来过滤结果。
public class UserViewModel
{
[Display(Name = "Other")]
public string otherProperty {get; set;}
[Display(Name = "Possible Targets")]
public List<Target> targets {get; set;}
[Display(Name = "Possible Results")]
public List<Result> results{get; set;}
}