我有项目DAL,BLL和Web。我应该在哪里使用ToList()执行查询?
现在我在控制器中使用ToList()执行查询 - 可以吗?例如 - 从一开始:
DAL - 我在NotesRepository类中的方法:
public IQueryable<Notes> GetAllNotes()
{
return context.Notes.Include(x => x.Comments).OrderByDescending(x => x.CreateDate);
}
BLL - 我在NotesService类中的方法:
public IEnumerable<Notes> GetNotes()
{
return _unitOfWork.NotesRepository.GetAllNotes();
}
Web - 我在控制器中的操作(使用ToList()执行查询):
public ActionResult Index()
{
var notes = _notesService.GetNotes().ToList();
return View(notes);
}
答案 0 :(得分:1)
在我个人看来,这是一个数据问题所以决定调用.ToList()应该在DAL中发生。可能有一种情况可以灵活地将事物链接在一起或改进查询,因此您可以证明将调用放在BLL中,但是无论如何都要将这种灵活性构建到DAL中并且整体上DAL返回数据,而不是查询对象。
并非它在现实生活中发生过,但这也使您可以更灵活地将DAL与其他数据源(例如web api)交换掉。如果你将IQueryable流入你的DAL,那就更难了,层/层封装就会被破坏。
我不建议将IQueryable放入Controller中。
答案 1 :(得分:1)
我同意@cadmium,我也会在DAL中而不是在Controller中。
PS:我更喜欢尽可能传递IEnumerable,只处理具体的List&lt;&gt;什么时候你真的需要它。