Linq находит все элементы из вложенного списка, которые имеют идентификатор - PullRequest
0 голосов
/ 18 марта 2019

У меня есть следующие классы:

public class AssignmentDetails : EntityBase
    {
        public DateTime StartingTime { get; protected set; }
        public DateTime EndingTime { get; protected set; }
        public ICollection<AssignedUser> AssignedUsers { get; protected set;}
        public Assignment Assigment { get; protected set; }
        public int AssigmentId { get; protected set; }
        public int OwnerId { get; protected set; }
        public User Owner { get; protected set; }
        public State State { get; protected set; }
        public AssignmentDetails(DateTime startingTime,DateTime endingTime,int ownerId,State state,ICollection<AssignedUser> assignedUsers)
        {
            AssignedUsers = assignedUsers;
            StartingTime = startingTime;
            EndingTime = endingTime;
            OwnerId = ownerId;
            State = state;
        }
        public AssignmentDetails() { }
    }

 public class Assignment : EntityBase
    {
        public string Title { get; protected set; }
        public AssignmentDetails AssignmentDetails { get; protected set; }
        public string Description { get; protected set; }
        public int ParentAssignmentId { get; protected set; }
        public Assignment(string title,string description,AssignmentDetails assignmentDetails)
        {
            Title = title;
            Description = description;
            AssignmentDetails = assignmentDetails;
        }
        public void AddParentAssignment(int parentAssignmentId)
        {
            ParentAssignmentId = parentAssignmentId;
        }
        public Assignment(){ }
    }

 public class AssignedUser : EntityBase
    {
        public AssignmentDetails Assignment { get; protected set; }
        public int AssignmentDetailsId { get; protected set; }
        public int UserId { get; protected set; }
        public AssignedUser(int userId)
        {
            UserId = userId;
        }
        public AssignedUser() { }
    }

Мне нужно найти все назначения для конкретного пользователя, который является владельцем назначения или назначен в AssignedUsers

Я попробовалследующие и некоторые другие альтернативы, но похоже, что я где-то ловлю уши.

public async Task<List<Assignment>> GetAllAsignmentsAsync(int userId)
    {
        return await _context.Assignments
            .Include(a => a.AssignmentDetails)
            .Where(x => x.AssignmentDetails.OwnerId == userId || x.AssignmentDetails.AssignedUsers.SelectMany(u=> u.UserId== userId))
            .ToListAsync();
    }

1 Ответ

5 голосов
/ 18 марта 2019
    .Where(x => x.AssignmentDetails.OwnerId == userId 
|| x.AssignmentDetails.AssignedUsers.Any(u=> u.UserId== userId))

Используйте Any для возврата true или false условия. SelectMany выбирает некоторые объекты в зависимости от условий

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...