ASP.NET Core Возвращение - PullRequest
       5

ASP.NET Core Возвращение

0 голосов
/ 11 октября 2019

Я использую пример базы данных Microsoft Northwind. Я создал базу данных и все работает, кроме этого кода ниже

Я хочу заставить эту логику работать:

select * from Products
join Suppliers
   on Products.customer_id = Suppliers.customer_id
where Products.customer_id = 1

Мой способ я пытался сделать этот запрос SQL в LINQ (без ошибок в VS2019):

    public async Task<IActionResult> Index()
    {
         var test = await (from ep in _context.Products
                 join e in _context.Suppliers on ep.SupplierId equals e.SupplierId
                 where (e.SupplierId == 1)
                 select new
                 {ep.ProductName,e.CompanyName}).ToListAsync();
    }
    return View(test);

ОШИБКА после запуска проекта и перехода к Индексу:

InvalidOperationException: элемент модели, переданный в ViewDataDictionary, имеет тип 'System.Collections.Generic. .List 1[<>f__AnonymousType1 1 [System.String]] ', но для этого экземпляра ViewDataDictionary требуется элемент модели типа' System.Collections.Generic.IEnumerable`1 [DbFirst.Models.Northwind.Products] '.

На всякий случай, я говорю, что этот код работает хорошо, но это не то, что мне нужно:

public async Task<IActionResult> Index()
{
    var test = await _context.Products.Where(x => x.SupplierId == 1).ToListAsync();

    return View(test);
}

1 Ответ

0 голосов
/ 11 октября 2019

Дэвид прав. Ваше представление получает IEnumerable<Product>, в то время как ваше действие возвращает список анонимного типа.

Вы можете создать определенную модель представления для своего представления:

public class ProductViewModel
{
    public string ProductName{ get; set; }
    public string CompanyName{ get; set; }
}

Затем,измените код действия так, чтобы он возвращал List<ProductViewModel>

public async Task<IActionResult> Index()
{
     var test = await (from ep in _context.Products
             join e in _context.Suppliers on ep.SupplierId equals e.SupplierId
             where (e.SupplierId == 1)

             select new ProductViewModel
             {  
                ep.ProductName,
                e.CompanyName
             }).ToListAsync();
}
return View(test);

Наконец, измените @model представления индекса:

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