如何在 Entity Framework 中使用 lambda 表达式和谓词
How to use lambda expressions and predicates with Entity Framework
我不熟悉将 lambda 表达式与 Entity Framework 结合使用,非常感谢这方面的帮助。
在我的项目中,我有两个实体 Author 和 Course 具有 1-M 关系(一个作者可以有多个课程):
public class Author
{
public int AuthorId {get; set;}
public string Name {get; set;}
public virtual ICollection<Course> Courses {get; set;}
}
public class Course
{
public int CourseId {get; set;}
public string Title {get; set;}
public int AuthorId {get; set;}
public virtual Author {get; set;}
}
我想检索具有相关课程的所有作者 - 这同样适用于我项目中的其他实体。为此,我想要一个类似于以下的 Get() 方法:
public class GenericService<T> where T : class
{
// DbContext defined
public IEnumerable<T> Get(...)
{
return Context...
}
}
在我的控制器操作中,我会做类似以下的事情:
public ActionResult Get_Authors_With_Courses ()
{
// var authors = Get (...)
return View(authors);
}
我不确定如何定义 returns parent/child 对象的 Get(...) 方法。有人可以在这方面指导我吗?
提前致谢。
您正在寻找的是简单的 linq,
context.Authors.Include(A => A.Courses).ToList();
这将 return 您所有的作者及其课程。
如果你想要一个通用的,
public class GenericService<T> where T : class
{
// DbContext defined = db
public IEnumerable<T> Get(string pathtoinclude = "")
{
// add checking if path is null remove the Include extension
// path to include in your example is courses
return db.Set<T>().Include(pathtoinclude).AsEnumerable();
}
}
你可以这样使用它
var authors = Get<Author>("Courses");
如果您想要所有拥有一门或多门相关课程的作者,那么您需要
var authorsWithCourses = context.Authors.Where(a => a.Courses.Any()).ToList();
如果您还想 return 您可以使用的课程 Include
var authorsWithCourses = context.Authors
.Include(a => a.Courses)
.Where(a => a.Courses.Any())
.ToList();
虽然我通常更喜欢投影而不是包含,所以你可以做类似的事情
var authorsWithCourses = context.Authors
.Where(a => a.Courses.Any())
.Select(a => new {
Author=a.Name,
Courses = a.Courses.Select(c => c.Title)
})
.ToList();
我不熟悉将 lambda 表达式与 Entity Framework 结合使用,非常感谢这方面的帮助。
在我的项目中,我有两个实体 Author 和 Course 具有 1-M 关系(一个作者可以有多个课程):
public class Author
{
public int AuthorId {get; set;}
public string Name {get; set;}
public virtual ICollection<Course> Courses {get; set;}
}
public class Course
{
public int CourseId {get; set;}
public string Title {get; set;}
public int AuthorId {get; set;}
public virtual Author {get; set;}
}
我想检索具有相关课程的所有作者 - 这同样适用于我项目中的其他实体。为此,我想要一个类似于以下的 Get() 方法:
public class GenericService<T> where T : class
{
// DbContext defined
public IEnumerable<T> Get(...)
{
return Context...
}
}
在我的控制器操作中,我会做类似以下的事情:
public ActionResult Get_Authors_With_Courses ()
{
// var authors = Get (...)
return View(authors);
}
我不确定如何定义 returns parent/child 对象的 Get(...) 方法。有人可以在这方面指导我吗?
提前致谢。
您正在寻找的是简单的 linq,
context.Authors.Include(A => A.Courses).ToList();
这将 return 您所有的作者及其课程。
如果你想要一个通用的,
public class GenericService<T> where T : class
{
// DbContext defined = db
public IEnumerable<T> Get(string pathtoinclude = "")
{
// add checking if path is null remove the Include extension
// path to include in your example is courses
return db.Set<T>().Include(pathtoinclude).AsEnumerable();
}
}
你可以这样使用它
var authors = Get<Author>("Courses");
如果您想要所有拥有一门或多门相关课程的作者,那么您需要
var authorsWithCourses = context.Authors.Where(a => a.Courses.Any()).ToList();
如果您还想 return 您可以使用的课程 Include
var authorsWithCourses = context.Authors
.Include(a => a.Courses)
.Where(a => a.Courses.Any())
.ToList();
虽然我通常更喜欢投影而不是包含,所以你可以做类似的事情
var authorsWithCourses = context.Authors
.Where(a => a.Courses.Any())
.Select(a => new {
Author=a.Name,
Courses = a.Courses.Select(c => c.Title)
})
.ToList();