C#C
C#15mo ago
A Ka Sup

Join to other table in LINQKit Predicate

hello, assume that i have a query
c#
var allClasses = from s in context.Classes select new ClassView {
    Id = s.Id,
    Name = s.Name,
};
// ClassView
public class ClassView {
    public int Id { get; set; }
    public string? Name { get; set; }
    public List<SubjectView> Subjects { get; set; }
}
// SubjectView
public class SubjectView {
    public int Id { get; set; }
    public string? Name { get; set; }
}

The Subject connect to Class through the table ClassSubject.
Due to some reasons, i cannot get the list subjects in the allClasses LINQ, so i write this
c#
var listClasses = await allClasses.ToListAsync();
foreach(var c in listClasses) {
    c.Subjects = await (from s in ClassSubject where s.ClassId = s.Id join x in context.Subject on s.SubjectId equals x.Id select new SubjectView {
        Id = x.Id,
        Name = x.Name,
    }).ToListAsync();
}

so here is my question, when i find the class by some subjects name, like ["Ma", "Li"], i build a predicate with LINQKit, it should be something like this
var predicate = LINQKit.PredicateBuilder.New<ClassView>(false);
foreach(var q in querySubject) {
    predicate = predicate.Or(s => s.Name.Contains(q));
}
allClasses = allClasses.Where(predicate);

But it's wrong, the func in Or()belongs to Class, not Subject. i need this predicate runs before the listClasses is defined, but i don't know how to join to the table Subject.
Can anyone please help me. Thank you!
Was this page helpful?