0

数行を返す LINQ クエリがあります。これには結合があり、会社の連絡先情報と詳細レコードが含まれます (そのため、連絡先情報はすべての行で繰り返されます)。ビュー ページで、連絡先情報をヘッダー領域に 1 回だけ表示してから、レコードセットをループして詳細データを表示したいと考えています。

ループせずに最初のレコードの連絡先データにアクセスするにはどうすればよいですか?

より良いアプローチはありますか?すべての連絡先フィールドを ViewBag 変数に詰め込むことは避けていました。単一の DB クエリでそれらを取得する方が正しいと考えたからです。

ところで、ここでコード ブロックを機能させるための秘訣は何ですか。私はいつもコード ボタンをクリックして、VS からコードを直接貼り付けます。色の書式設定が機能する場合と機能しない場合があります。

    <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>
        }

編集 Boossss のアイデアを使用して、この LINQ と ViewModel を思いつきましたが、うまくいく解決策が得られません。VendorStatusHistory レコードのサブコレクションを含む単一のレコードセットを取得します。これはまさに私が望むものであり、ビューモデルのプロパティを表示しようとするとエラーがスローされ、「定義が含まれていません...そして拡張メソッドが見つかりませんでした.」Boossss ビューモデルを使用してみましたが、同じエラーが発生しました。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>
4

1 に答える 1