我如何使用 linq join 函数结果从 razor view 插入到 viewbag 中?

How can i use the linq join function result inserted in a viewbag from razor view?

如何使用 linq join 函数结果从 razor view 插入到 viewbag 中? 在下面的代码中,我尝试将 ViewBag.photos 中的照片列表设置为在 ViewPage Razor 页面中使用它。

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 {"Unable to cast object of type 'System.Collections.Generic.List1[<>f__AnonymousType61[Wenar.Models.DomainModel.Photo]]' to type 'System.Collections.Generic.IEnumerable`1[Wenar.Models.DomainModel.Photo]'."} System.InvalidCastException

您需要创建 Wenar.Models.DomainModel.Photo 类型的对象列表,您可以使用 Select 方法:

... ((pho, pro) => new { photos = pho }))
    .Select(s => new Wenar.Models.DomainModel.Photo{ photoId = s.photoId, photoName = s.photoName })
    .ToList();

您使用查询创建的 objects 是 anonymous type - new { photos = pho }.

如果您想使用 Photo 类型的 collection,您需要将查询更改为

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

您无需将 collection 转换为 IEnumerable 即可在其上使用 foreach,也无需调用 ToList()您的查询是否只需要 foreach collection.