Как я могу использовать результат функции linq join, вставленный в viewbag из вида бритвы? - PullRequest
0 голосов
/ 31 марта 2020
var result = photos.Join(projects, (pho => pho.ProjectID), (pro => pro.ProjectID), ((pho, pro) => new { photos = pho })).ToList();
ViewBag.photos = result;

Когда я пытаюсь использовать ViewBag.photos на странице просмотра, выдается ошибка.

<div class="col-lg-3 col-sm-6 col-md-6" data-aos="fade-up" data-aos-delay="60">
                @foreach (var item in (IEnumerable<Wenar.Models.DomainModel.Photo>) ViewBag.photos)
                {
                    <img src="~/ProjectPhotos/@item.Photo1;" />
                 }
</div>

Ошибка:

$ exception {"Невозможно приведите объект типа 'System.Collections.Generi c .List 1[<>f__AnonymousType6 1 [Wenar.Models.DomainModel.Photo]]' к типу 'System.Collections.Generi c .IEnumerable`1 [Wenar.Models. DomainModel.Photo] '. "} System.InvalidCastException

Ответы [ 2 ]

1 голос
/ 31 марта 2020

Объекты, которые вы создаете с помощью вашего запроса, имеют анонимный тип - new { photos = pho }.

Если вы хотите использовать коллекцию типа Photo, вам нужно изменить запрос на что-то вроде

var result = photos
                .Join(projects, (pho => pho.ProjectID), (pro => pro.ProjectID), ((pho, pro) 
                     => new Photo() { photos = pho }))
                .ToList();

Вам не нужно приводить коллекцию к IEnumerable, чтобы использовать на ней foreach, и вам не нужно вызывать ToList() в вашем запросе, если вы нужно только foreach коллекции.

0 голосов
/ 31 марта 2020

Вам необходимо создать список объектов типа Wenar.Models.DomainModel.Photo, вы можете использовать Select метод:

... ((pho, pro) => new { photos = pho }))
    .Select(s => new Wenar.Models.DomainModel.Photo{ photoId = s.photoId, photoName = s.photoName })
    .ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...