Я работаю над приложением для опроса в ASP.NET MVC5. У меня есть три таблицы SQL для связанных классов (опрос, опрос, голосование). У каждого опроса есть идентификатор, у каждого опроса есть идентификатор, а также внешний ключ для сопоставления с PollID, и каждый голос имеет идентификатор и внешний ключ, чтобы соответствовать и PollOptionID, и PollID.
Я создал ViewModel и успешно извлекаю подробный вид опроса, чтобы включить список опций, доступных в этом опросе. Каков следующий шаг в вытягивании третьей таблицы в это представление? Я успешно могу подсчитать, сколько голосов существует в этом опросе в представлении, но я изо всех сил пытаюсь связать его с правильным вариантом опроса.
Я настроил модель представления и передал информацию. Я также использую два оператора .Include в своем контроллере для захвата как опросов, так и голосов.
Вот мое действие контроллера:
public ActionResult DetailsTest(int id)
{
var poll = _context.Polls.Include(c => c.PollOptions).Include(c1 => c1.Votes).SingleOrDefault(c => c.Id == id);
var viewModel = new PollDetailViewModel
{
Poll = poll,
};
return View(viewModel);
}
и вот мой взгляд:
@model CamPoll.ViewModels.PollDetailViewModel
@{
ViewBag.Title = "Details";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Details Test</h2>
<p>
@Html.ActionLink("New Poll Option", "New", "PollOptions", null, new { @class = "btn btn-primary" })
</p>
<table class="table table-bordered table-hover">
<thead>
<tr>
<th>Poll Option</th>
<th>Vote </th>
<th>Vote Count</th>
</tr>
</thead>
@foreach (var pollOption in Model.Poll.PollOptions)
{
<tr>
<td>@Html.ActionLink(pollOption.Name, "Details", "PollOptions", new { id = pollOption.Id }, null)</td>
<td>
<button type="submit" class="btn btn-primary">Vote</button>
</td>
<td>@Model.Poll.Votes.Count()</td>
</tr>
}
</table>
В моем примере в настоящее время есть 3 варианта опроса, и они вытягивают в таблицу и 2 голоса, оба из которых принадлежат одному и тому же варианту опроса. Так что в моей таблице строка @ Model.Poll.Votes.Count () должна тянуть 2,0,0 для каждой строки таблицы. Однако каждая строка вытягивает 2 (что означает подсчет всех голосов в этом опросе, а не всех голосов в этом опросе, которые принадлежат этому опросу)
Как мне ограничить мою строку Votes.Count, чтобы она включала в себя только те, которые принадлежат этому конкретному опросу, а не каждый голос, принадлежащий этому опросу.
Как я могу ограничить мою строку Votes.Count, чтобы она включала только те, которые принадлежат этому конкретному опросу, а не каждый голос, принадлежащий этому опросу.
Надеюсь, это имеет смысл.
Большое спасибо за помощь.
Edit:
Вот модели:
namespace CamPoll.Models
{
public class Poll
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public List<PollOption> PollOptions { get; set; }
public List<Vote> Votes { get; set; }
}
public class PollOption
{
[Key]
public int Id { get; set; }
public int PollId { get; set; }
[ForeignKey("PollId")]
public Poll Poll { get; set; }
public string Name { get; set; }
public int VoteCount { get; set; }
public List<Vote> Votes { get; set; }
}
public class Vote
{
[Key]
public int Id { get; set; }
public DateTime VoteTime { get; set; }
public int VoteWorth { get; set; }
public int PollOptionId { get; set; }
[ForeignKey("PollOptionId")]
public PollOption PollOption { get; set; }
public int PollId { get; set; }
[ForeignKey("PollId")]
public Poll Poll { get; set; }
}
}
ожидаемый результат в представлении сведений опроса - это таблица, в которой проверяется каждый опрос, принадлежащий этой таблице, и счетчик каждого голоса, который принадлежит каждому опросу.