IT박스

LINQ : 개체에 목록의 항목이없는 위치 선택

itboxs 2020. 10. 23. 07:41
반응형

LINQ : 개체에 목록의 항목이없는 위치 선택


나는 여기에서 LINQ 구문으로 어려움을 겪고 있습니다. 다른 곳에서는 내가 찾고있는 것을 정확히 찾을 수 없습니다.

좋아, 내가 이걸 가지고 있다고하자 :

public class Bar
{
   public int BarId { get; set; }
}

public class Foo
{
   public List<Bar> BarList { get; set; }
}

List<Foo> fooBunch = GetABunchOfFoos(); //let's just assume I'm getting more than one
List<Foo> fooSelect = new List<Foo>;
List<Bar> filterBars = GetAFewBars(); //assume I'm getting like 2 or 3

fooSelect = (from f in fooBunch
             where !(from b in f.BarList select b.BarId).Contains(ITEM FROM filterBars.BarId)
             select f).ToList();

간단히 말해서 LINQ를 사용하여 다른 목록의 개체를 기반으로 개체 목록을 필터링하고 싶습니다. 이해가 되길 바랍니다. 포함 부분에서 방금 길을 잃은 것 같습니다 ... 어떻게 쓰는지 모르겠습니다.


일반적으로 "Except"확장자를 찾습니다.

var rejectStatus = GenerateRejectStatuses();
var fullList = GenerateFullList();
var rejectList = fullList.Where(i => rejectStatus.Contains(i.Status));
var filteredList = fullList.Except(rejectList);

이 예제에서 GenerateRegectStatuses ()는 거부하려는 상태 목록이어야합니다 (또는 예제를 기반으로보다 구체적인 용어 List<int>로 ID의 a ).


원하지 않는 id의 더 구체적인 컬렉션에 이것을 덤프하십시오.

var notTheseBarIds = filterBars.Select(fb => fb.BarId);

그런 다음 이것을 시도하십시오.

fooSelect = (from f in fooBunch
             where !notTheseBarIds.Contains(f.BarId)
             select f).ToList();

아니면 이거:

fooSelect = fooBunch.Where(f => !notTheseBarIds.Contains(f.BarId)).ToList();

나는 이것을 시도하지 않았으므로 나는 아무것도 보장하지 않습니다.

foreach Bar f in filterBars
{
     search(f)
}
Foo search(Bar b)
{
    fooSelect = (from f in fooBunch
                 where !(from b in f.BarList select b.BarId).Contains(b.ID)
                 select f).ToList();

    return fooSelect;
}

이 간단한 LINQ를 사용해보십시오.

//For a file list/array
var files = Directory.GetFiles(folderPath, "*.*", SearchOption.AllDirectories);

//simply use Where ! x.Contains
var notContain = files.Where(x => ! x.Contains(@"\$RECYCLE.BIN\")).ToList();

//Or use Except()
var containing = files.Where(x => x.Contains(@"\$RECYCLE.BIN\")).ToList();
    notContain = files.Except(containing).ToList();

참고 URL : https://stackoverflow.com/questions/5640259/linq-select-where-object-does-not-contain-items-from-list

반응형