몇 행을 반환하는 LINQ 쿼리가 있습니다. 회사 레코드와 함께 회사 연락처 정보가 포함되도록 가입 정보가 있습니다 (연락처 정보가 모든 행에 대해 반복됩니다). 내보기 페이지에서 머리글 영역에 연락처 정보를 한 번만 표시 한 다음 레코드 집합을 반복하여 세부 정보 데이터를 표시하려고합니다.첫 번째 레코드 집합의 데이터 액세스
루프없이 첫 번째 레코드의 연락처 데이터에 어떻게 액세스합니까?
더 좋은 방법이 있습니까? 나는 하나의 DB 쿼리로 그 정보를 얻는 것이 더 정확할 것이라고 생각하면서 모든 연락처 필드를 ViewBag 변수에 채우는 것을 피하고있었습니다.
BTW 코드 블록을 여기에서 작동시키는 것이 트릭입니다. 항상 코드 버튼을 클릭 한 다음 VS에서 직접 내 코드를 붙여 넣습니다. 때로는 색상 포맷이 작동하고 때로는 그렇지 않습니다. Boossss 아이디어로 작업
<fieldset>
<legend>Contact Information</legend>
<div class="view-field">
@Html.ValueFor(m => m.CompanyName)
</div>
<div class="view-field">
@Html.ValueFor(m => m.Name)
</div>
<div class="view-field">
@Html.ValueFor(m => m.Address1)
</div>
<div class="view-field">
@Html.ValueFor(m => m.City)
</div>
<div class="view-field">
@Html.ValueFor(m => m.State)
</div>
<div class="view-field">
@Html.ValueFor(m => m.Zip)
</fieldset>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(m => item.StatusDate)
</td>
<td>
@Html.DisplayFor(m => item.StatusName)
</td>
<td>
@Html.DisplayFor(m => item.StatusUserName)
</td>
<td>
@Html.DisplayFor(m => item.StatusNote)
</td>
</tr>
}
편집
,이 LINQ와 뷰 모델로 등장하지만 그들은 확실히 나에게 작동하는 솔루션을받지 못하고있다. 내가 원하는 정확히 VendorStatusHistory 레코드의 subcollection 하나의 레코드 세트를 얻습니다. 뷰 모델의 속성을 표시하려고 할 때 오류가 발생합니다. "정의를 포함하지 않고 확장 메서드가 없습니다 ... 찾을 수 없습니다." 나는 Boossss viewmodel을 사용해 보았지만 같은 오류가 발생했습니다. 내 LINQ 쿼리가 꺼져있는 것 같습니다.솔브레드 Boossss 의견을 기반으로 업데이트되었습니다.
public StatusHistoryView VendorStatusHistory(String id)
{
Guid pid = Guid.Parse(id);
StatusHistoryView query = _db.VendorProfiles
.Include("VendorStatusHistory")
.Include("StatusCodes")
.Select(s => new StatusHistoryView
{
ProfileID = s.ProfileID,
Name = s.Name,
CompanyName = s.CompanyName,
CompanyDBA = s.CompanyDBA,
Email = s.Email,
Phone = s.Phone,
Website = s.Website,
Address1 = s.Address1,
Address2 = s.Address2,
City = s.City,
State = s.State,
Zip = s.Zip,
VendorStatusHistory = s.VendorStatusHistories
}
)
.Where(x => x.ProfileID == pid).SingleOrDefault();;
return query;
}
public class StatusHistoryView
{
public StatusHistoryView()
{
this.VendorStatusHistory = new HashSet<VendorStatusHistory>();
}
public System.Guid ProfileID { get; set; }
public int StatusID { get; set; }
[Display(Name = "Full Name")]
public string Name { get; set; }
[Display(Name = "Email")]
public string Email { get; set; }
[Display(Name = "Phone")]
public string Phone { get; set; }
[Display(Name = "Website")]
public string Website { get; set; }
[Display(Name = "Company")]
public string CompanyName { get; set; }
[Display(Name = "DBA")]
public string CompanyDBA { get; set; }
[Display(Name = "Address")]
public string Address1 { get; set; }
[Display(Name = "Address (extra)")]
public string Address2 { get; set; }
[Display(Name = "City")]
public string City { get; set; }
[Display(Name = "State")]
public string State { get; set; }
[Display(Name = "Zip Code")]
public string Zip { get; set; }
public virtual ICollection<VendorStatusHistory> VendorStatusHistory { get; set; }
}
하고 업데이트 된보기
... @model VendorProfileIntranet.Models.StatusHistoryView
<table id="VendorTable" width="100%" class="gradeA">
<thead>
@foreach (var item in Model.VendorStatusHistory)
{
<tr>
<th style="width:200px">
@Html.DisplayNameFor(m => item.DateCreated)
</th>
<th>
@Html.DisplayNameFor(m => item.Status)
</th>
<th>
@Html.DisplayNameFor(m => item.UserName)
</th>
<th>
@Html.DisplayNameFor(m => item.Notes)
</th>
</tr>
break;
}
</thead>
<tbody>
@foreach (var item in Model.VendorStatusHistory)
{
<tr>
<td>
@Html.DisplayFor(m => item.StatusDate)
</td>
<td>
@Html.DisplayFor(m => item.StatusName)
</td>
<td>
@Html.DisplayFor(m => item.StatusUserName)
</td>
<td>
@Html.DisplayFor(m => item.StatusNote)
</td>
</tr>
}
</tbody>
</tbody>
</table>
내가 대신, 세부 기록과 함께 회사의 연락처 정보를 조인 뷰 모델을 생성하고 뷰의 모델로 통과하지 못한 제안
foreach에 연락처 정보를 래핑하고 break 문을 포함하여 한 번만 반복되도록하는 방법이 있습니다. 누군가를 바라보며보다 우아한 해결책을 제안 할 수 있습니다. :) – SQLGrinder