Mi aplicación puede ser mala, estoy tratando de aprender ¿Cuál es la solución para este error? El error que recibí

Controlador No sé exactamente cómo hacer la lista, los ejemplos que probé no funcionaron Supongo que necesito hacer una lista de alguna manera

     public IActionResult Rooms()
        {

            using (var db = new HotelWebContext())
            {
                var roomList = db.Rooms.Where(z => z.OtherTypeId == z.OtherType.OtherTypeId && z.RoomTypeId == z.RoomType.RoomTypeId && z.StatusId == z.Status.RoomStatusId).Select(r => new { r.RoomId, r.OtherType.OtherTypeName, r.OtherType.BasePrice, r.OtherType.Capacity, r.OtherType.BedType, r.OtherType.Services, r.RoomType.RoomTypeName, r.Status.RoomStatusName }).ToList();

                return View(roomList);
            }


        }

Modelo lo creé automáticamente con el marco de la entidad.

public partial class Room
    {
        public Room()
        {
            Reservations = new HashSet<Reservation>();
        }

        public int RoomId { get; set; }
        public int? RoomTypeId { get; set; }
        public int? OtherTypeId { get; set; }
        public int? StatusId { get; set; }

        
        public virtual OtherType OtherType { get; set; }
        public virtual RoomType RoomType { get; set; }
        public virtual RoomStatus Status { get; set; }
        public virtual ICollection<Reservation> Reservations { get; set; }
    }

Rooms.cshtml tiene un bucle foreach

@model IEnumerable<WebApplication3.Models.Room>

@{
    ViewData["Title"] = "Odalarımız";
    ViewData["Dark"] = "text-dark";
    ViewData["Info"] = "text-info";
}
<div class="odafiyatlari mx-auto">
    <div class="odaimg">
        <div class="container">
            <h1 style="margin-top: 200px; margin-bottom: 200px;font-family: 'Playfair Display', serif;" class="text-center text-dark ">ODALARIMIZ</h1>
            <div class="row">


                <!-- @for (int i = 0; i < 0; i++)
                {
                    <div class="col-xl-4 py-4">
                        <div style="border-radius: 10px;" class="card mx-auto" style="width: 18rem;">
                            <img class="card-img-top " src="~/images/oda1.jpg" alt="Card image cap">
                            <div class="card-body">
                                <h6 class="card-text">Durum:Uygun</h6><br>
                                <h5 class="card-title">İki Kişilik İkiz Yataklı Oda</h5>
                                <h5 class="card-title">Oda Tipi:Aile</h5>
                                <h6 class="card-text">399₺ / Gecelik</h6><br>
                                <h6 class="card-text">Kapasite: İki Kişilik</h6><br>
                                <h6 class="card-text">Yatak: Kral Yatak</h6><br>
                                <h6 class="card-text">Servis: İnternet, Televizyon, Duş</h6><br>
                                <a href="#" class="btn btn-info">Odayı Seç</a>
                            </div>
                        </div>
                    </div>
                }-->
                @foreach (var item in Model)
                {
                    <div class="col-xl-4 py-4">
                        <div style="border-radius: 10px;" class="card mx-auto" style="width: 18rem;">
                            <img class="card-img-top " src="~/images/oda1.jpg" alt="Card image cap">
                            <div class="card-body">
                                <h6 class="card-text">Durum:@item.Status.RoomStatusName</h6><br>
                                <h5 class="card-title">@item.OtherType.OtherTypeName</h5>
                                <h5 class="card-title">Oda Tipi:@item.RoomType.RoomTypeName</h5>
                                <h6 class="card-text">@item.OtherType.BasePrice₺ / Gecelik</h6><br>
                                <h6 class="card-text">Kapasite: @item.OtherType.Capacity</h6><br>
                                <h6 class="card-text">Yatak: @item.OtherType.BedType</h6><br>
                                <h6 class="card-text">Servis: @item.OtherType.Services</h6><br>
                                <a href="#" class="btn btn-info">Odayı Seç</a>
                            </div>


                        </div>


                    </div>
                }
            </div>
        </div>
    </div>
</div>
<!--ODA BİTİŞ-->

Modelo

1
Hüseyin Dönmez 10 may. 2021 a las 17:28

3 respuestas

La mejor respuesta

Necesita usar el método .Include() para incluir los modelos relacionados como se muestra a continuación:

var model = db.Rooms
    .Where(z => z.OtherTypeId == z.OtherType.OtherTypeId && z.RoomTypeId == z.RoomType.RoomTypeId && z.StatusId == z.Status.RoomStatusId)
    .Include(r=>r.OtherType)
    .Include(r=>r.RoomType)
    .Include(r=>r.Status)
    .ToList();
0
Rena 11 may. 2021 a las 02:24

Estás proyectando tus habitaciones en un nuevo objeto anónimo con valores llamando

.Select(r => new { r.RoomId, r.OtherType.OtherTypeName, r.OtherType.BasePrice, r.OtherType.Capacity, r.OtherType.BedType, r.OtherType.Services, r.RoomType.RoomTypeName, r.Status.RoomStatusName })

Así que ahora tienes un IEnumerable de tipo anónimo. Pero la acción espera devolver un IEnumerable of Rooms. Simplemente elimine la selección que debería ser bueno, ya que está recuperando de la tabla de habitaciones.

1
Zokka 10 may. 2021 a las 14:33

La lista que está pasando a ver debe ser un tipo de clase de habitación.

0
Jeroen Steenbeeke 11 may. 2021 a las 06:29