Выберите из двух таблиц, затем сравните asp.net mvc

У меня есть этот класс списка желаний:

    public class Wishlist
    {
        public int Id { get; set; }
        public int ProductId { get; set; }
        [ForeignKey("ProductId")]
        public virtual Product Product { get; set; }
        public string PersonId { get; set;}
        [ForeignKey("PersonId")]
        public virtual ApplicationUser Person { get; set; }
    }
    public class Product
    {
        public string Title { get; set; }
        public int CategoryId { get; set; }
        [ForeignKey("CategoryId")]
        public virtual Category Category { get; set; }
        public string Description { get; set; }
        public decimal Price { get; set; }
        public bool Featured { get; set; }
        public bool Sold { get; set; }
        public string Image { get; set; }
        [NotMapped]
        public HttpPostedFileBase UploadImage { get; set; }
        public string PersonId { get; set; }
        [ForeignKey("PersonId")]
        public virtual ApplicationUser Person { get; set; }
    }

Я пытаюсь добавить все продукты в таблицу dbcontext.Wishlist, используя:

string currentUserId = User.Identity.GetUserId();
var list2 = DbContext.Wishlist.Where(p => p.PersonId == currentUserId).ToList();
var list3 = (from p in DbContext.Products
             from w in list2
             where p.PersonId == w.PersonId
             select new Models.Response.ProductIndexResponse()
             {
               Id = p.Id,
               Image = p.Image,
               Title = p.Title,
               Price = p.Price
             }).ToList();

Но я получаю эту ошибку: невозможно создать постоянное значение типа «Finder.Models.Wishlist». В этом контексте поддерживаются только примитивные типы или типы перечисления.

Что я делаю не так?

в какой строке выдается эта ошибка? это на list3? у меня были сомнения select new Models.Response.ProductIndexResponse(), работает ли он в sql-запросе.

Bagus Tesa 10.04.2022 14:59

@BagusTesa Я не знаю, разрешены ли внешние ссылки, но: imgur.com/a/J5PywuU

EL02 10.04.2022 15:03

вы можете отредактировать свой вопрос и поместить это изображение в вопрос - если вы предоставили код в тексте, сообщение об ошибке должно быть в порядке. также см. ответ Юна. я пропустил, что вы передали list2 на list3, что также является недопустимым ходом XD

Bagus Tesa 10.04.2022 15:08
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
3
28
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я не думаю, что вы можете передать список WishList в LINQ.

Вместо этого измените запрос LINQ с помощью JOIN, как показано ниже:

var query = (from p in DbContext.Products
             join w in DbContext.Wishlist on p.PersonId equals w.PersonId
             where p.PersonId == currentUserId
             select new
             {
               Id = p.Id,
               Image = p.Image,
               Title = p.Title,
               Price = p.Price
             }).ToList();

var result = query
    .Select(x => Models.Response.ProductIndexResponse()
    {
        Id = x.Id,
        Image = x.Image,
        Title = x.Title,
        Price = x.Price
    })
    .ToList();
Ответ принят как подходящий

Можете ли вы попытаться упростить запрос следующим образом:

var wishPorducts = DbContext.Wishlist
    .Where(p => p.PersonId == currentUserId)
    .Select(x => new Models.Response.ProductIndexResponse()
         {
           Id = x.Product.Id,
           Image = x.Product.Image,
           Title = x.Product.Title,
           Price = x.Product.Price
         })
     .ToList();

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

Другие вопросы по теме