【问题标题】:Linq find all elements from nested list which have idLinq 从嵌套列表中查找所有具有 id 的元素
【发布时间】:2019-03-18 13:01:58
【问题描述】:

我有以下课程:

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();
    }

【问题讨论】:

    标签: c# list linq .net-core


    【解决方案1】:
        .Where(x => x.AssignmentDetails.OwnerId == userId 
    || x.AssignmentDetails.AssignedUsers.Any(u=> u.UserId== userId))
    

    使用Any 返回truefalse 条件。 SelectMany 根据条件选择一些对象

    【讨论】:

    • 但是在这种情况下,如果该列表中存在包含 userId 的元素,Any 将始终返回 true,对吗?我只想选择具有 Assignment.AssignmentDetails.AssignedUser.UserId == userId 的作业
    • @Spoukey,这正是Any 会做的事情
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    • 2023-03-25
    相关资源
    最近更新 更多