>

다른 객체 목록 내에서 객체 목록을 필터링하려면 도움이 필요합니다.

현재 FirstLevel 객체를 필터링하여 기준과 일치하는 SecondLevel 객체 만 반환 할 수 있으며 (목록에 Id가 있음) ThirdLevel 필터가있는 경우에는 SecondLevel 만 반환해야합니다. 기준과 일치하는 ThirdLevel 객체

필요한 것은 ThirdLevel 배열에 기준과 일치하는 배열 만 포함하는 것입니다.

하나의 Linq 쿼리 내에서이 작업을 수행 할 수 있습니까?

편집 : 인간이 이해할 수있는 (??) 예 : 옷장이 있다고 가정하면이 옷장에는 서랍이 많이 있습니다. 이제이 서랍에는 여러 색의 양말이 있습니다. 내가 필요한 것은 서랍에서 다른 색상을 제거하는 동안 검은 양말이 들어있는 것들만 표시하도록 서랍을 필터링 할 수 있어야합니다. (그렇다면 말도 안돼)

아래는 예제 코드입니다 :

using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
namespace MyNamespace
{
    public class Program
    {
        public static void Main(string[] args)
        {
            List<int> filterSecondLevel = new List<int>(){1, 2};
            List<int> filterThirdLevel = new List<int>(){3};
            ThirdLevel _3a = new ThirdLevel(){Id=1};
            ThirdLevel _3b = new ThirdLevel(){Id=2};
            ThirdLevel _3c = new ThirdLevel(){Id=3};
            ThirdLevel _3d = new ThirdLevel(){Id=4};
            List<ThirdLevel> _3la = new List<ThirdLevel>(){_3a,_3b};
            List<ThirdLevel> _3lb = new List<ThirdLevel>(){_3c,_3d};
            SecondLevel _2a = new SecondLevel(){ Id=1, ThirdLevelList=_3la};
            SecondLevel _2b = new SecondLevel(){ Id=2, ThirdLevelList=_3lb};
            List<SecondLevel> _2la = new List<SecondLevel>(){_2a,_2b};
            FirstLevel _1a = new FirstLevel(){ Id=1, SecondLevelList=_2la};
            var result = _1a.SecondLevelList.Where(x => 
                                                          (filterSecondLevel.Count == 0 || filterSecondLevel.Contains(x.Id)) && 
                                                              x.ThirdLevelList.Where(y => 
                                                                  filterThirdLevel.Count == 0 || filterThirdLevel.Contains(y.Id)
                                                      ).ToList().Count > 0
                                                  ).ToList();
        }
    }
    public class FirstLevel
    {
        public int Id {get;set;}
        public List<SecondLevel> SecondLevelList { get; set; }
    }
    public class SecondLevel
    {
        public int Id {get;set;}
        public List<ThirdLevel> ThirdLevelList { get; set; }
    }
    public class ThirdLevel
    {
        public int Id {get;set;}
    }
}

  • 답변 # 1

    ANY ()를 사용해야합니다

               var result = _1a.SecondLevelList.Where(x =>
                                                              (filterSecondLevel.Count == 0 || filterSecondLevel.Contains(x.Id)) &&
                                                                  x.ThirdLevelList.Where(y => filterThirdLevel.Contains(y.Id)).Any())
                                                                  .ToList();
    
    

관련 자료

  • 이전 tfs 2018 업데이트 2 업그레이드 - reporting services
  • 다음 mvvm - 네임 스페이스 MvvmCrossForms에 형식 또는 네임 스페이스 플랫폼이 없습니다