Как вернуть значения из запроса LINQ и отобразить их в таблице с использованием C #, ASP.NET MVC и Entity Framework - PullRequest
1 голос
/ 27 сентября 2019

Я написал запрос linq, из которого я хотел бы получить значения из этого запроса и отобразить результаты в таблице.Я получаю сообщение об ошибке, как показано ниже

Элемент модели, переданный в словарь, имеет тип 'System.Data.Entity.Infrastructure.DbQuery 1[<>f__AnonymousType5 6 [System.Int32, System.String, System.String, System.String, System.String, System.Nullable 1[System.DateTime]]]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable 1 [App.Web.marketingdbclients_invalidEmails] '

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

public class InvalidEmailsController : Controller
{
    private MarketingDBEntitiesModel db = new MarketingDBEntitiesModel();

    public ActionResult InvalidEmails(int UploadId)
    {
        //var emails = db.sp_marketing_getInvalidEmailsByUploadId(UploadId);

        var emailTable = (from mie in db.marketingdbclients_invalidEmails
                          join mdt in db.marketingdbclients_dataTable on mie.ClientId equals mdt.ClientId
                          where mdt.UploadId == 88 
                          select new  
                                 {
                                      mie.ClientId,  mie.Email1, mie.Email2, 
                                      mie.Email3, mie.Email4, mie.DateStamp
                                 });

        return View(emailTable);              
    }
}

Это мой взгляд, который связан с таблицей как моделью (я думаю, что это неправильный метод)

@model IEnumerable<App.Web.marketingdbclients_invalidEmails>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.ClientId)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Email1)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Email2)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Email3)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Email4)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.DateStamp)
        </th>
        <th></th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.ClientId)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Email1)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Email2)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Email3)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Email4)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.DateStamp)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.invalidEmailId }) |
            @Html.ActionLink("Details", "Details", new { id=item.invalidEmailId }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.invalidEmailId })
        </td>
    </tr>
}

</table>

Ответы [ 2 ]

1 голос
/ 27 сентября 2019

Вы пытаетесь передать анонимный тип в 'App.Web.marketingdbclients_invalidEmails', так что это приводит к ошибке.

Вам необходимо создать новую модель представления с необходимыми свойствами, которые вы хотите проецироватьиз LINQ и покажите в своем представлении.

public class marketingdbclients_invalidEmailsVM
{
    public int ClientId { get; set; }
    public string Email1 { get; set; }
    public string Email2 { get; set; }
    public string Email3 { get; set; }
    public string Email4 { get; set; }
    public DateTime DateStamp { get; set; }
}

Теперь используйте эту модель представления для своего LINQ

public ActionResult InvalidEmails(int UploadId)
{
        //var emails = db.sp_marketing_getInvalidEmailsByUploadId(UploadId);

        var emailTable = (from mie in db.marketingdbclients_invalidEmails
                          join mdt in db.marketingdbclients_dataTable on mie.ClientId equals mdt.ClientId
                          where mdt.UploadId == 88
                          select new marketingdbclients_invalidEmailsVM
                          {
                              ClientId = mie.ClientId,
                              Email1=mie.Email1,
                              Email2=mie.Email2,
                              Email3=mie.Email3,
                              Email4=mie.Email4,
                              DateStamp=mie.DateStamp
                          });

        return View(emailTable);
    }

И привяжите свою модель, используя новую созданную модель представления.

@model IEnumerable<App.Web.marketingdbclients_invalidEmailsVM>    

Надеюсь, это решит вашу проблему.

0 голосов
/ 27 сентября 2019

Если у вас на виду модель:

@model IEnumerable<App.Web.marketingdbclients_invalidEmails>

Вы должны вернуть тот же тип из действия контроллера.Измените это:

... select new  {...});

на это:

... select new App.Web.marketingdbclients_invalidEmails {...}).ToList();

и модель на:

@model List<App.Web.marketingdbclients_invalidEmails>

Удачи

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