Как получить представление для запроса соединения с linq - PullRequest
0 голосов
/ 30 декабря 2018

Во-первых, я новичок в .Net MVC, и извините, если есть какое-то недопонимание.

Я искал эту проблему уже 2 дня, но, к сожалению, не смог найти ответ.

Я пытаюсь сделать запрос на присоединение к linq и хочу перейти к просмотру по списку.

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

Мой контроллер;

                var QueryTransferList = (from t in db.Transfers
                                    .OrderBy(item => item.Date)
                                    .ThenBy(item => item.TransferTime)
                                    .ThenBy(item => item.GuestName)
                                    join s in db.StatusDurums
                                    on t.Status equals s.StatusName
                                    where
                                        t.Date >= todaysDate &&
                                        t.Date <= todaysDate
                                    select new { t, s }).ToList();
            return View(QueryTransferList);

МойПросмотр;

@model IEnumerable<NuvoTTMS.Models.Transfer>
                    @foreach (var item in Model)
                {
                    <tr>
                        <td class="text-center">@Html.ActionLink(item.Id.ToString(), "Edit", new { id = item.Id })</td>
                        <td class="text-center">@Html.DisplayFor(modelItem => item.Date)</td>
                        <td>@Html.DisplayFor(modelItem => item.Reference)</td>
                        <td>@Html.DisplayFor(modelItem => item.GuestName)</td>
                        <td>@Html.DisplayFor(modelItem => item.From1)</td>
                        <td>@Html.DisplayFor(modelItem => item.To1)</td>
                        <td>@Html.DisplayFor(modelItem => item.Assistance)</td>
                        <td class="text-center">@Html.DisplayFor(modelItem => item.Pax)</td>
                        <td>@Html.DisplayFor(modelItem => item.FlightNumber)</td>
                        <td class="text-center">@Html.DisplayFor(modelItem => item.TransferTime)</td>
                        <td>@Html.DisplayFor(modelItem => item.TransferVehicle)</td>
                        <td>@Html.DisplayFor(modelItem => item.TransferSupplier)</td>
                        <td>@Html.DisplayFor(modelItem => item.DriverName)</td>
                    </tr>
                }

Код ошибки;

The model item passed into the dictionary is of type 'System.Collections.Generic.List`1[<>f__AnonymousType6`2[NuvoTTMS.Models.Transfer,NuvoTTMS.Models.StatusDurum]]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[NuvoTTMS.Models.Transfer]'.

Что я сделал;

  1. Я также указал имена столбцов, такие как

выберите новый {t.Assistance, s.StatusId}). ToList ();

А также я использую "AsEnumerable ()" вместо .Tolist ();

### Обновлено ###

Я очень благодаренВы за ваш быстрый ответ.Я просто слежу за вашими комментариями, и это работает хорошо.

Как вы можете видеть из приведенных ниже кодов, я хочу отправить все столбцы для просмотра.Нужно ли записывать все имена столбцов одно за другим, как показано ниже, или есть ли другой способ сделать это?

var QueryTransferList = (from t in db.Transfers
                                    .OrderBy(item => item.Date)
                                    .ThenBy(item => item.TransferTime)
                                    .ThenBy(item => item.GuestName)
                                     join s in db.StatusDurums
                                     on t.Status equals s.StatusName
                                     where
                                         t.Date >= todaysDate &&
                                         t.Date <= todaysDate
                                     select new NuvoTTMS.Models.TransferViewModel
                                     {
                                          Id = t.Id,
                                          Date = t.Date,
                                          Service = t.Service,
                                          Nationality = t.Nationality,
                                          Reference = t.Reference,
                                          GuestName = t.GuestName,
                                          From1 = t.From1,
                                          To1 = t.To1,
                                          Assistance = t.Assistance,
                                          Pax = t.Pax,
                                          FlightNumber = t.FlightNumber,
                                          TransferTime = t.TransferTime,
                                          TransferVehicle = t.TransferVehicle,
                                          TransferSupplier = t.TransferSupplier,
                                          Notes = t.Notes,
                                          InvoiceCode = t.InvoiceCode,
                                          InvoiceRate = t.InvoiceRate,
                                          Status = t.Status,
                                          DriverName = t.DriverName,
                                          StatusId = s.StatusId,
                                          StatusName = s.StatusName,
                                          StatusColor = s.StatusColor

                                     }).ToList();

И также мой последний вопрос, я объединил модели Transfer и StatusDurum в TransferViewModel, как показано ниже.Есть ли способ реализовать модели Transfer и StatusDurum для TransferViewModel.

На самом деле, если я внесу какие-либо изменения в модель передачи, то мне нужно сделать это в tranferviewmodel, верно?

public class TransferViewModel
{
    public int Id { get; set; }

    [Display(Name = "Date")]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public DateTime? Date { get; set; }


    [Display(Name = "Transfer Type")]
    public string Service { get; set; }

    [Display(Name = "National")]
    public string Nationality { get; set; }

    [Display(Name = "Gta Reference")]
    public string Reference { get; set; }

    [Display(Name = "Guest Name")]
    public string GuestName { get; set; }

    [Display(Name = "From")]
    public string From1 { get; set; }

    [Display(Name = "To")]
    public string To1 { get; set; }

    [Display(Name = "Ass.")]
    public string Assistance { get; set; }

    [Display(Name = "Pax")]
    public string Pax { get; set; }

    [Display(Name = "Flight No")]
    public string FlightNumber { get; set; }

    [Display(Name = "Time")]
    public string TransferTime { get; set; }

    [Display(Name = "Vehicle")]
    public string TransferVehicle { get; set; }

    [Display(Name = "Supplier")]
    public string TransferSupplier { get; set; }

    [Display(Name = "Transfer Notes")]
    public string Notes { get; set; }

    [Display(Name = "Invoice Rate")]
    public string InvoiceRate { get; set; }

    [Display(Name = "Invoice Code")]
    public string InvoiceCode { get; set; }

    [Display(Name = "Status")]
    public string Status { get; set; }

    [Display(Name = "Driver Name")]
    public string DriverName { get; set; }

    public int StatusId { get; set; }
    public string StatusName { get; set; }       
    public string StatusColor { get; set; }

1 Ответ

0 голосов
/ 30 декабря 2018

Ваша модель имеет тип IEnumerable<NuvoTTMS.Models.Transfer>, как вы указали в представлении:

@model IEnumerable<NuvoTTMS.Models.Transfer>

Таким образом, вашему представлению должен быть передан объект этого типа.Прямо сейчас вы возвращаете коллекцию анонимного типа, которая не может работать.

Вы можете создать IEnumerable<NuvoTTMS.Models.Transfer> в своем запросе linq следующим образом:

select new NuvoTTMS.Models.Transfer
{ 
  Assistance = t.Assistance,
  StatusId =  s.StatusId 
}).ToList()

Поскольку у вас есть данные изнесколько моделей, которые вы хотите отобразить, в этом случае вам нужно будет создать ViewModel с теми свойствами, которые необходимы для просмотра:

public class TransfersViewModel
{
   public int StatusId { get; set; }
   ............
   ............
}

, а затем в представлении установить вашу модель такого типа:

@model IEnumerable<NuvoTTMS.Models.TransfersViewModel>

и заполните его и верните обратно в View в действии контроллера:

select new NuvoTTMS.Models.TransfersViewModel
{ 
  Assistance = t.Assistance,
  StatusId =  s.StatusId 
}).ToList()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...