我有一个传统的类数据库,由以下模型表示。实体框架如何通过导航属性的属性过滤我的结果?
public class Course
{
public int Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public CourseLevel Level { get; set; }
public float FullPrice { get; set; }
public Author Author { get; set; }
public IList<Tag> Tags { get; set; }
public IList<Attendee> Attendees { get; set; }
}
public class Attendee
{
public int Id { get; set; }
public int StudentId { get; set; }
public decimal Tuition { get; set; }
public Student Student { get; set; }
}
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public string Address { get; set; }
}
public class Author
{
public int Id { get; set; }
public string Name { get; set; }
public IList<Course> Courses { get; set; }
}
public class Tag
{
public int Id { get; set; }
public string Name { get; set; }
public IList<Course> Courses { get; set; }
}
我需要得到一个课程名称或描述的一部分或学生的名字的一部分匹配我的搜索字符串的类列表。第一部分很简单。
List<Course> courses = db.Courses.Where(w => w.Title.IndexOf(searchString) > -1 || w.Description.IndexOf(searchString) > -1).ToList();
现在如何过滤w.Attendees.Student.Name?
我想:
List<Course> courses = db.Courses
.Where(w => w.Title.IndexOf(searchString) > -1 ||
w.Description.IndexOf(searchString) > -1 ||
w.Attendees.Any(a => a.Student.Name.IndexOf(searchString) > -1)).ToList();
它只是返回一个空列表。
我对Linq还是一种新鲜感,我来自Grails。任何帮助表示赞赏。
请阅读[问]并提供[mcve]。这段代码不会编译,更不用说返回一个空列表('Where()'不会返回'List')。你太简化了这个例子。你显示的原则应该工作。 –
CodeCaster
您是否尝试仅运行w.Attendees.Any(a => a.Student.Name.IndexOf(searchString)并调试它?您确定它不是空的吗?您的构造是正确的,您正在检查是否有任何项目参加者有名字包含一个字符串的学生 – victor
应该是:a.Student.Name.Contains(searchString) – jdweng