我目前有一个 LINQ 查询,它可以正确检索所有相关的民意测验问题及其相关响应。在此查询中,我使用 .Include() 方法来检索响应。我喜欢这种方法,因为它使我的 View 中的代码变得简单——基本上我有一个用于响应的 @foreach 嵌套在用于问题的 @foreach 中。
现在,我想添加特定于响应的信息,例如今天的投票数、本周的投票数和总体投票数。同样,这些将针对每个问题的每个响应进行检索和显示。
是否有一种高效的 LINQ 解决方案可以让我继续使用我的 .Include() 方法和我的嵌套 @foreach 循环,或者我是否需要废弃 .Include() 方法并使用连接将所有内容整合在一起?
如果出于性能原因它很重要,这是用 .net MVC-3 编写的。
提前感谢您的意见/建议。
最佳答案
I like this approach because it makes the code in my View simple -- basically I have a @foreach for the responses nested inside a @foreach for the questions.
就我个人而言,我不会对此感到满意。当您可以使用 Display Temapltes 时,为什么还要在您的 View 中编写循环?至于你关于包括今天的票数、本周的票数和总体票数的问题,答案一如既往地是使用专门针对 View 需求量身定制的 View 模型:
public class QuestionViewModel
{
public int VotesToday { get; set; }
public int VotesThisWeek { get; set; }
public int TotalVotes { get; set; }
public IEnumerable<ResponseViewModel> { get; set; }
}
然后你会传递一个 IEnumerable<QuestionViewModel>
在您看来,它看起来像这样:
@model IEnumerable<AppName.Models.QuestionViewModel>
@Html.DisplayForModel()
并在~/Views/Shared/DisplayTemplates/QuestionViewModel.cshtml
@model AppName.Models.QuestionViewModel
<div>@Model.VotesToday</div>
<div>@Model.VotesThisWeek</div>
<div>@Model.TotalVotes</div>
@Html.DisplayFor(x => x.ResponseViewModel)
并在~/Views/Shared/DisplayTemplates/ResponseViewModel.cshtml
:
@model AppName.Models.ResponseViewModel
<div>@Model.Body</div>
现在,这是一个清晰的 View 。
现在让我们转到 Controller :
public class QuestionsController: Controller
{
private readonly IQuestionsRepository _repository;
public QuestionsController(IQuestionsRepository _repository)
{
_repository = repository;
}
public ActionResult Index()
{
IEnumerable<Question> model = _repository.GetQuestions();
IEnumerable<QuestionViewModel> viewModel = Mapper
.Map<IEnumerable<Question>, IEnumerable<QuestionViewModel>>(model);
return View(viewModel);
}
}
在这里,我们将数据访问抽象到存储库中,这样 Controller 就永远不会知道有关 EF 或您正在使用的任何数据访问技术的任何信息。 Controller 应该只知道您的模型、 View 模型和如何操作模型的抽象(在本例中为存储库接口(interface))。
就您的模型和 View 模型之间的转换而言,您可以使用 AutoMapper (我示例中的 Mapper.Map<TSource, TDest>
部分)。
就存储库而言,这是一个实现细节:是否对数据库执行一个或三个查询由您决定。您所需要的只是能够汇总所需的信息。
关于linq - 寻求 Entity Framework 中 3 层 LINQ 查询的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4752259/