как получить доступ к новым объединенным столбцам в MVC asp.net с помощью linq - PullRequest
1 голос
/ 06 апреля 2009

У меня проблема с отображением значения поля столбца в представлении.

Я возвращаю взгляд следующим образом.

var TicketList = (from T in db.Tickets
                  where  T.Title.Contains("a")
                  select new {
                        customerName = (
                             from cname in db.Customers
                             where cname.CustomerId == T.CustomersId
                             select cname.FirstName + cname.LastName
                        ) ,
                        Title = T.Title
                  }).ToList();

 return View("SearchTicketsResult",TicketList);

и на странице просмотра у меня есть

<%foreach (TicketList ti in (IEnumerable)ViewData.Model) {%>
    <%=ti.Title%><br />
    <%=ti.customerName %>
<% } %>

Я не могу перечислить имя клиента или заголовок на странице. Он говорит: «Не удалось найти тип или имя пространства имен« TicketList »(отсутствует директива using или ссылка на сборку?)»

Может кто-нибудь направить меня, пожалуйста.

Заранее спасибо.

1 Ответ

2 голосов
/ 06 апреля 2009

"TicketList" - это имя переменной для списка анонимного типа. Типа "TicketList" нет. Приведение из анонимных типов может быть выполнено («по примеру»), но оно очень хрупкое, и я просто не рекомендую использовать для этого анонимный тип.

Одним из вариантов будет объявление моего собственного типа (в папке "model (s)" пользовательского интерфейса) - например, TicketSummary / TicketLite (и т. Д.) С Title и CustomerName. Затем используйте этот тип:

public class TicketSummary
{

     public string CustomerName { get; set; }
     public string Title { get; set; }
}

var ticketList = (from t in db.Tickets
                  where  t.Title.Contains("a")
                  select new TicketSummary
                  {
                      CustomerName = (
                          from cname in db.Customers
                          where cname.CustomerId == t.CustomersId
                          select cname.FirstName.ToString()
                      ).FirstOrDefault(),
                      Title = t.Title
                  }).ToList();
return ticketList;

Тогда вы сможете использовать:

<%foreach (TicketSummary ts in (IEnumerable<TicketSummary>)ViewData.Model) {%>
    <%=ts.Title%><br />
    <%=ts.customerName %>
<% } %>

На самом деле, я бы, вероятно, перенес эту работу в репозиторий и имел бы метод репозитория, который возвращает список типа итога.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...