通过链接查询结束n + 1问题以连接多个表

时间:2015-09-24 14:45:32

标签: c# asp.net-mvc linq controller

我有一个Linq查询,我当前拉出一个表,然后在视图中我过滤5连接到一个特定的值。这很多人都知道会大大增加我的视图加载的时间,因为每个记录必须为每个连接运行自己的单独查询。我想将连接切换到Linq查询,所以它在一个查询中,但我遇到了麻烦。

这是我的控制器代码:

private IEnumerable<Ticket> FindTechTickets(Guid ticketStatusId)
{
       Guid g = Guid.Parse(Session["LoggedUserID"] as string);

       return db.Tickets
              .Include(t => t.TicketNotes)
              .Where(t => t.TechnicianId == g).Where(t => t.TicketStatusId == ticketStatusId)
              .OrderByDescending(t => t.TicketNumber)
              .ToList();

}

这是我的观看代码:

@foreach (var item in Model.OrderByDescending(m => m.TicketNumber))
{
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.TicketNumber)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.OpenDate)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.OpenUser.FullName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Category.CategoryName)
        </td>
        <td>
            <div>
                @Html.DisplayFor(modelItem => item.TicketNotes.OrderBy(t => t.TicketNoteDate).Last().TicketNoteDate)
            </div>
        </td>
        <td>
            <div>
                @Html.DisplayFor(modelItem => item.TicketNotes.OrderBy(t => t.TicketNoteDate).Last().UserNote.FullName)
            </div>
        </td>
        <td>
            <div style="overflow:auto; width:300px;">
                @Html.DisplayFor(modelItem => item.TicketNotes.OrderBy(t => t.TicketNoteDate).First().Note)
            </div>
        </td>
        <td>
            @Html.ActionLink("Open/Edit", "EditTechTicket", new { id = item.TicketId, returnUrl = "TechOpenTickets", ViewBag.page})
        </td>
    </tr>
}

这是我尝试更改Linq查询:

var ts = 
          from t in db.Tickets
          Join tn in db.TicketNotes on t.TicketId equals tn.TicketId
          Where(t => t.TechnicianId == g).Where(t => t.TicketStatusId == ticketStatusId)
          OrderByDescending(t => t.TicketNumber)
          select new
          {

          }

问题是几乎每一行都会出现构建错误。从Join行开始。

这是我从以下网站获取信息的链接:

Pulling out different columns from different tables using LINQ

1 个答案:

答案 0 :(得分:0)

  1. 您似乎错过了一些括号。

  2. Join不是您正在寻找的方法。它完全不同。你想要Include