본문 바로가기
C#/WPF

C#/WPF - Linq의 결과 var(Wherelistiterator) To List 변환 방법

by 코딩이라구 2024. 12. 3.

안녕하세요. 이번에 Linq를 통하여 특정 List에서 원하는 결과를 추출하는 방식을 공부하고 있었습니다. Linq를 이용한 결과는 정상적으로 var 변수에 들어갔지만, 다시 기존 Object 리스트에 넣는 과정에서 오류가 발생하여 해결 방법에 대하여 작성하려고 합니다.

이 글을 보시는 분들께서도 많은 시간을 들이시지 마시고, 빠르게 이 문제를 해결하셨으면 합니다.

 

Wherelistiterator To List 형변환

// Object 정의
public class Test
{
    public Test(int nAge, string strName, string strGender)
    {
    	age = nAge;
        name = strName;
        gender = strGender;
    }

    public int age { get; set; }
    public string name { get; set; }
    public string gender { get; set; }
}

// Main
public class ConvertTest
{
	// Object List 생성
    List<Test> test_lists = new List<Test>();
    test_lists.Add = new Test(27, "이명연", "남");
    test_lists.Add = new Test(32, "전지은", "여");
    test_lists.Add = new Test(26, "홍승익", "남");
    test_lists.Add = new Test(36, "유솜이", "여");
    
    // Linq를 이용하여 남자만 추출
    var man = from Test in test_lists
              where Test.gender.Equals("남")
              select Test;
              
    // 여기서 오류(System.InvalidCastException)가 발생
    List<Test> man_list = (List<Test>)man;
}

 

위와 같이 System.InvalidCastException 오류가 발생하였습니다. 이유는 Wherelistiterator 타입의 데이터를 List Object로 변형을 하지 못하였기 때문입니다.

 

다음은 해결 방법에 대하여 알아보도록 하겠습니다.

// Linq를 이용하여 남자만 추출하며, 리스트 형식으로 반환
var man = (from Test in test_lists
          where Test.gender.Equals("남")
          select Test).ToList();
             
// 같은 리스트 형식이라 정상적으로 대입이 가능
List<Test> man_list = (List<Test>)man;

 

이 처럼 Linq를 이용할 때, 반환값을 List 형식으로 받은 다음 Object에 대입하게 된다면 정상적으로 작동합니다.

 

이번 시간에는 Linq의 반환값을 Object에 대입할 때 형변환으로 인한 System.InvalidCastException 오류에 대한 해결 방법에 대하여 알아보았습니다. 더욱 유익한 글을 많이 올릴 수 있도록 노력하겠습니다.

댓글