본문 바로가기

C# 문법

[C#] Linq에서 값이 존재하는지 확인, Any, ALL, Exist

Any, All ,Exist 결과값은 bool (참, 거짓)의 값이다.

  • 상황에 따라 어떻게 사용되는지 보겠습니다.

Any

  • Any는 조건에 해당하는 값이 1개라도 존재한다면, '맞다'라는 결과를 도출

Any 활용

public void Run()
{
    var arrSource = new string[] { "춘남", "추남", "공목다방" };
    var arrTarget = new string[] { "양뱅", "태발", "공목다방" };

    //Any 단일 비교
    string name = "춘남";
    // => arrSource에 값 중에 Name에 해당하는 값이 1개라도 있는가?
    bool result = arrSource.Any(f => f == name);
    Console.WriteLine($"1개라도 조건에 해당되는가 ?  { (result ? "포함" : "미포함") }");

    //Any 다중 값 비교
    // => arrSouce에서 arrTarget에 값 중에 일치하는 값이 한개라도 있는가?
    result = arrSource.Any(f => arrTarget.Contains(f));
    Console.WriteLine($"1개라도 조건에 해당되는가 ?  { (result ? "포함" : "미포함") }");
}

결과

1개라도 조건에 해당되는가 ?  포함
1개라도 조건에 해당되는가 ?  포함

All

  • All은 조건에 모든 값들이 만족하는가? 만족한다면 '맞다'라는 결과를 도출

All활용

public void Run()
{   
    var tmp = new (string name, int age)[] { (name: "춘남", age: 33), (name: "추남", age: 33) };

    //ALL비교
    string name = "춘남";
    // => tmp의 값중에서 이름이 모두 춘남 인가?
    bool result = tmp.All(f => f.name == name);
    Console.WriteLine($"이름이 모두 춘남 인가 ?  { (result ? "맞다" : "틀리다") }");

    // => tmp의 값 중에서 나이가 모두 30살 이상인가?
    result = tmp.All(f => f.age  > 30);
    Console.WriteLine($"나이가 모두 30살 이상인가?  { (result ? "맞다" : "틀리다") }");
}

결과

이름이 모두 춘남 인가 ?  틀리다
나이가 모두 30살 이상인가?  맞다

Exist

  • Exist은 조건에 해당하는 값이 존재한다면 '맞다'라는 결과를 도출
  • Exist는 List에서만 사용이 가능합니다.

Exist활용

public void Run()
{   
    var tmp = new (string name, int age)[] { (name: "춘남", age: 33), (name: null, age: 20) };

    //Exist 값이 존재하는가?
    // => tmp의 값 중에서 이름이 존재하는가?
    bool result = tmp.ToList().Exists(f => string.IsNullOrWhiteSpace(f.name));
    Console.WriteLine($"이름이 없는 값이 존재 하는가?  { (result ? "맞다" : "틀리다") }");

    //=> tmp의 age가 30 이하인 값이 있는가?
    result = tmp.ToList().Exists(f => f.age < 30);
    Console.WriteLine($"나이가 30 이하인 값이 있는가?  { (result ? "맞다" : "틀리다") }");
}

결과

이름이 없는 값이 존재 하는가?  맞다
나이가 30 이하인 값이 있는가?  맞다