使用MVC3,我有一个Student Repository(在一个项目中)和一个StudentService(在另一个项目中)。在服务中,我想创建一个函数,返回db表中的所有学生。这是一种为我做事的新方式,所以我有点新鲜。在下面的GetAllStudents函数中,我如何更改语法以选择所有。
在存储库中:
namespace SpeakOut.Data
{
public class StudentRepository
{
SpeakOutDataContext context;
private Table<StudentEntity> table;
public StudentRepository()
{
context = new SpeakOutDataContext();
table = context.GetTable<StudentEntity>();
}
public IQueryable<Student> Select()
{
return table.Select(x => new Student
{
WNumber = x.WNumber,
CatalogueYear = x.CatalogueYear,
Standing = x.Standing
});
}
}
}
在服务中:
namespace SpeakOut.Services
{
public class StudentService
{
private StudentRepository repository;
public StudentService()
{
repository = new StudentRepository();
}
public IQueryable<Student> GetAllStudents()
{
return repository.Select().All(x => x.FirstName) ; //**This line is where I don't know how I would call all the students**
}
}
}
答案 0 :(得分:4)
你甚至不需要一个空白的Select,你可以只调用.AsQueryable,或者只是将'table'作为IQueryable返回。
答案 1 :(得分:2)
public IQueryable<Student> GetAllStudents()
{
return repository.Select();
}
上面的代码只是一种传递方法。唯一的好处是将存储库隐藏在服务后面,并且可能通过给它一个更好的名称。
此时尚未检索到任何数据。数据集合将推迟到IQuerable
被使用,例如调用.ToList()
时。将其保留为IQuerablye
的好处是可以通过代码进一步添加额外的过滤器和排序顺序。这些添加内容将由LINQ提供程序使用。