Generics 如何在实体框架中使用lambda表达式和谓词
我不熟悉在实体框架中使用lambda表达式,希望在这方面能得到一些帮助 在我的项目中,我有两个具有1-M关系的实体作者和课程(一个作者可以有多个课程): 我不知道如何定义返回父/子对象的Get(…)方法。有人能在这方面指导我吗Generics 如何在实体框架中使用lambda表达式和谓词,generics,lambda,asp.net-mvc-5,entity-framework-6,extension-methods,Generics,Lambda,Asp.net Mvc 5,Entity Framework 6,Extension Methods,我不熟悉在实体框架中使用lambda表达式,希望在这方面能得到一些帮助 在我的项目中,我有两个具有1-M关系的实体作者和课程(一个作者可以有多个课程): 我不知道如何定义返回父/子对象的Get(…)方法。有人能在这方面指导我吗 提前感谢。您要找的是简单的linq context.Authors.Include(A => A.Courses).ToList(); 这将返回所有作者及其课程 如果你想要一个普通的 public class GenericService<T> whe
提前感谢。您要找的是简单的linq
context.Authors.Include(A => A.Courses).ToList();
这将返回所有作者及其课程
如果你想要一个普通的
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();
}
}
公共类泛型服务,其中T:class
{
//定义的DbContext=db
public IEnumerable Get(字符串pathtoinclude=“”)
{
//添加检查路径是否为null删除包含扩展名
//要包含在示例中的路径是课程
返回db.Set().Include(pathtoinclude.AsEnumerable();
}
}
你可以这样使用它
var authors = Get<Author>("Courses");
var作者=Get(“课程”);
如果您希望所有作者都有一个或多个相关课程,那么您需要
var authorsWithCourses = context.Authors.Where(a => a.Courses.Any()).ToList();
如果您还想退还课程,您可以使用包括
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();
Munzer,这很有魅力。这是我一直在寻找的,特别是通用部分。是否有一种方法可以一次性加载所有子对象?我认为在这种情况下,我们必须编写单独的查询。我认为更好的做法是启用延迟加载,这种方式应该可以工作。我很高兴我提供了帮助:)Phil,我喜欢投影的想法。这有助于自定义输出。
var authorsWithCourses = context.Authors.Where(a => a.Courses.Any()).ToList();
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();