我正在编写一个分层的 ASP.Net 应用程序,它由业务层、存储库层、服务层...组成。在存储库层中,我使用 EntityFramework 作为 ORM。在服务层中,我想将 lambda 形式的查询(包括 OrderBy 或 OrderByDescending ,take,skip,...)传递给存储库层并在 DbSet 上运行查询并返回结果实体。
简单来说:(我如何在 asp.net c# 中执行类似以下模拟代码的操作)
public class Repository
{
public List<Book> findby(var query)
{
var dbcontext = DataContextFactory.GetDataContext();
//The following line should do this : dbcontext.Books.Where(B=>B.New==true && B.Id>99).OrderBy(B=>B.Date).ThenBy(B=>B.Id).Skip(2).Take(10);
List<Book> matchedBooks = RunQueryOnBooks(dbcontext.Books,query);
return matchedBooks;
}
}
public class Service
{
public List<Book> getTopNewBooks(Repository _repository)
{
var query = Where(B=>B.New==true && B.Id>99).OrderBy(B=>B.Date).ThenBy(B=>B.Id).Skip(2).Take(10);
List<Book> matchedBooks = _repository.findby(query);
return matchedBooks;
}
}
所以问题是:
- 我应该使用哪种类型而不是var进行查询(如果有的话)
- 我如何在dbcontext.Books上执行查询?
请给出一个像我这样的好例子和更多参考资料。提前致谢。