© 2026 Hedgehog Software, LLC

TwitterGitHubDiscord
More
CommunitiesDocsAboutTermsPrivacy
Search
Star
Setup for Free
C#C
C#•16mo ago
A Ka Sup

Join to other table in LINQKit Predicate

hello, assume that i have a query
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; }
}
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
Subject
connect to
Class
Class
through the table
ClassSubject
ClassSubject
.
Due to some reasons, i cannot get the list subjects in the
allClasses
allClasses
LINQ, so i write this
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();
}
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"]
["Ma", "Li"]
, i build a predicate with
LINQKit
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);
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()
Or()
belongs to
Class
Class
, not
Subject
Subject
. i need this predicate runs before the
listClasses
listClasses
is defined, but i don't know how to join to the table
Subject
Subject
.
Can anyone please help me. Thank you!
C# banner
C#Join
We are a programming server aimed at coders discussing everything related to C# (CSharp) and .NET.
61,871Members
Resources

Similar Threads

Was this page helpful?
Recent Announcements

Similar Threads

❔ Predicate in LINQ GroupBy
C#CC# / help
4y ago
❔ Entity Framework, How To Join Second Table To Third Table In The First Table?
C#CC# / help
3y ago
Why Predicate contains in and parentheses?
C#CC# / help
4y ago
DeleteBehavior can't be cascade in join table
C#CC# / help
2y ago