LINQ с Включить и Где не показывает желаемых результатов - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть оператор linq, который объединяет таблицу «Резиденты и запросы» следующим образом:

var resident = await _context.Resident
.Include(s => s.Requests)                
.FirstOrDefaultAsync(m => m.ID == id);

Проблема в том, что отображаются все запросы, даже те, которые не связаны с резидентом.

Я пытался добавить оператор Where, но все еще получал все запросы.

var resident = await _context.Resident
.Include(s => s.Requests)
.Where(s =>s.UserID == "f7c6ceef-663f-48af-9a84-b0a3d2a97601")
.FirstOrDefaultAsync(m => m.ID == id);

Для справки это класс резидентной модели

public class Resident
    {
        public Resident()
        {
            this.CreatedAt = DateTime.Now;
        }

        public int ID { get; set; }
        public string UserID { get; set; }

        [Required]
        [Display(Name = "Last Name")]
        public string LastName { get; set; }

        [Required]
        [Display(Name = "First Name")]
        public string FirstName { get; set; }

        [Required]
        [Display(Name = "Street Address")]
        public string StreetAddress { get; set; }

        [Required]
        [Display(Name = "Postal Code")]
        public string PostalCode { get; set; }

        [Required]
        [Display(Name = "Phone Number")]
        public string PhoneNumber { get; set; }

        [Required]
        [Display(Name = "Number of Cameras")]
        public int CameraQty { get; set; }

        public DateTime CreatedAt { get; set; }

        public string Latlng { get; set; }        

        public ICollection<Camera> Cameras { get; set; }
        public ICollection<Request> Requests { get; set; }



    }

Это класс модели запроса

using System.ComponentModel.DataAnnotations;

namespace MVC_NeighbourhoodCamera.Models
{
    public class Request
    {
        public Request()
        {
            this.CreatedAt = DateTime.Now;
        }

        public int ID { get; set; }
        public int ResidentID { get; set; }
        public string UserID { get; set; }

        public DateTime StartDateTime { get; set; }
        public DateTime EndDateTime { get; set; }

        [DataType(DataType.MultilineText)]
        public string Details { get; set; }
        public Boolean Completed { get; set; }
        public Boolean Active { get; set; }
        public DateTime CreatedAt { get; set; }


        public Resident Resident { get; set; }
    }
}

1 Ответ

0 голосов
/ 25 апреля 2019

У вас не правильно установлен внешний ключ в Resident-> Requests отношение один-ко-многим.

Исправьте свой класс Request следующим образом, добавив ForeignKeyAttribute (+ выполните миграцию и запустите его в БД):

public class Request
{
    //Other properties
    ..
    public int ResidentID { get; set;}
    ForeignKey["ResidentID"]
    public Resident Resident { get; set;}   
}

Более подробную информацию можно найти, например, здесь .

...