如何使用IQueryable选择所有

时间:2012-02-20 17:00:18

标签: c# entity-framework

使用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**
    }


}

}

2 个答案:

答案 0 :(得分:4)

你甚至不需要一个空白的Select,你可以只调用.AsQueryable,或者只是将'table'作为IQueryable返回。

答案 1 :(得分:2)

public IQueryable<Student> GetAllStudents()
{
    return repository.Select();
}

上面的代码只是一种传递方法。唯一的好处是将存储库隐藏在服务后面,并且可能通过给它一个更好的名称。

此时尚未检索到任何数据。数据集合将推迟到IQuerable被使用,例如调用.ToList()时。将其保留为IQuerablye的好处是可以通过代码进一步添加额外的过滤器和排序顺序。这些添加内容将由LINQ提供程序使用。