Когда я работаю над своим проектом и учусь на каждом этапе, я все еще застреваю в некоторых частях.У меня есть 3 таблицы SubJobs, MaterialRequired и Parts.Требуемый материал действительно только справочная таблица.На мой взгляд, мне нужно произвести SubJob Detail, а затем список деталей.Итак, у Subjob есть много частей, и я хотел, чтобы таблица частей была чистой, без необходимости добавлять дубликаты данных в таблицу частей.Например, подзадача с номером 102311 может иметь номер детали Ef3012, а другая подзадача может иметь такую же часть.Поэтому я не хочу, чтобы один и тот же номер детали 5 раз находился в таблице с разными вспомогательными заданиями.Поэтому я создал таблицу MaterialRequired, которая содержит номер SubJob и PartNumber, которые являются ключами для других таблиц.Я кормлю страницу номером SubJob и отображаю данные в ViewModel.Страница загружается с деталями SubJob, но у меня возникают проблемы с отображением частей.В приведенном ниже коде result.RequiredDetail создает список partNumbers из MaterialsRequired, как и должно быть.Я только использую этот код, чтобы узнать, как он работает.Result.PartsDetail в его текущей форме выдает только 1 запись вместо всех для этой подзадачи.Есть ли что-то, чего мне не хватает в самой модели или есть другой способ получить результат, чтобы получить нужный мне список?
Вот мой ViewModel:
public partial class SubJobDetails
{
public static SubJobDetails GetSubjobsAndParts(string mReq, CustomerEntities db)
{
var Parts = from pts in db.Parts
join mr in db.MaterialRequired on pts.PartNumber equals mr.Material
join sj in db.SubJobs on mr.SubJob equals sj.JobNumber
where (mr.SubJob == mReq)
select new SubJobDetails()
{
Parts = pts,
Material = mr,
SubJobs = sj
};
var result = Parts.FirstOrDefault();
if (result != null)
{
result.RequiredDetail = db.MaterialRequired.Where(a => a.SubJob == result.SubJobs.JobNumber);
result.PartsDetail = db.Parts.Where(a => a.PartNumber == result.Material.Material);
};
return result;
}
public virtual Parts Parts { get; set; }
public virtual SubJobs SubJobs { get; set; }
public virtual MaterialRequired Material { get; set; }
public virtual IEnumerable<Parts> PartsDetail { get; set; }
public virtual IEnumerable<MaterialRequired> RequiredDetail { get; set; }
Это контроллер(Я считаю, что это работает, как ожидалось):
public ActionResult PartsDetail(string mReq)
{
if (mReq == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
SubJobDetails modelInstance = SubJobDetails.GetSubjobsAndParts(mReq, db);
//if (modelInstance == null)
//{
// return HttpNotFound();
//}
return View(modelInstance);
Вот моя страница просмотра:
@model BestenEquipment.Models.SubJobDetails
@{
ViewBag.Title = "PartsDetail";
Layout = "~/Views/Shared/CustomerDashboardLayout.cshtml";
}
<div id="page-wrapper">
<div class="row">
<div class="col-lg-12">
<div>
<h4>Sub Job</h4>
<hr />
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.SubJobs.Description)
</dt>
<dd>
@Html.DisplayFor(model => model.SubJobs.Description)
</dd>
<dt>
@Html.DisplayNameFor(model => model.SubJobs.ExtDescription)
</dt>
<dd>
@Html.DisplayFor(model => model.SubJobs.ExtDescription)
</dd>
<dt>
@Html.DisplayNameFor(model => model.SubJobs.PartNumber)
</dt>
<dd>
@Html.DisplayFor(model => model.SubJobs.PartNumber)
</dd>
<dt>
@Html.DisplayNameFor(model => model.SubJobs.Drawing)
</dt>
<dd>
@Html.DisplayFor(model => model.SubJobs.Drawing)
</dd>
</dl>
</div>
<div class="row">
<div class="col-lg-12">
<div>
<h4>Parts</h4>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.Parts.PartNumber)
</th>
<th>
@Html.DisplayNameFor(model => model.Parts.Description)
</th>
<th>
@Html.DisplayNameFor(model => model.Parts.ExtDescription)
</th>
<th>
@Html.DisplayNameFor(model => model.Parts.DrawingNumber)
</th>
</tr>
@foreach (var item in Model.PartsDetail)
{
<tr>
<td>
@Html.DisplayFor(model => item.PartNumber)
</td>
<td>
@Html.DisplayFor(model => item.Description)
</td>
<td>
@Html.DisplayFor(model => item.ExtDescription)
</td>
<td>
@Html.DisplayFor(model => item.DrawingNumber)
</td>
<td></td>
</tr>
}
</table>
</div>
</div>
</div>
</div>
<!-- /.col-lg-12 -->
</div>
</div>