[C# 문법] C# Linq 디버깅 하는 방법

안녕하세요. 오늘은 C# 문법에서 Linq 문법을 디버깅 하는 방법에 대해서 알려 드리려고 합니다. 전 개인적으로 Linq 구문을 정말 많이 쓰고 있고, 데이터를 다룰때 Linq 구문을 이용하면 매우 유용하게 데이터를 처리할 수 있어서 웬만하면 Linq 구문을 정말 많이 사용하고 있는 편입니다. 그러나 Linq 구문을 사용하다 보면 몇가지 불편한 점들도 있는데요. 그 중에서 대표적으로 Linq 구문을 다루면서 불편했던 부분이 바로 디버깅할때 Linq 구문의 세세한 결과 데이터를 보고 싶은데, 보기가 어렵고 불편한 부분이 있다는 점이었습니다. 그러나 구글링을 통해 기사를 보던 중, Linq 구문의 디버깅 방법을 꽤 유용하게 설명해 주는 사이트가 있어서 여러분들에게도 소개해 드리고자 포스팅 하게 되었습니다. 해당 사이트는 아래 URL 로 참조 해 놓도록 하겠습니다.

참조

예제 코드

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;

namespace ConsoleApp7
{
    static class Program
    {
        static void Main(string[] args)
        {
            List<Employee> employees = new List<Employee>()
            {
                new Employee() { Name = "범범조조", Age = 29, Gender = "남자", Salary = 61000 },
                new Employee() { Name = "박명수", Age = 19, Gender = "남자", Salary = 62000 },
                new Employee() { Name = "아이유", Age = 39, Gender = "여자", Salary = 38000 },
                new Employee() { Name = "유재석", Age = 49, Gender = "남자", Salary = 52000 },
                new Employee() { Name = "정준하", Age = 59, Gender = "남자", Salary = 39000 },
                new Employee() { Name = "리아", Age = 69, Gender = "여자", Salary = 56000 }
            };

            var res = employees.LogLINQ("source", e => e.Name)
                                .Where(e => e.Gender == "남자")
                                .LogLINQ("logWhere", e => e.Name)
                                .Take(3)
                                .LogLINQ("logTake", e => e.Name)
                                .Where(e => e.Salary > 500)
                                .LogLINQ("logWhere2", e => e.Name)
                                .OrderBy(e => e.Age);
        }

        public static IEnumerable<T> LogLINQ<T>(this IEnumerable<T> enumerable, string logName, Func<T, string> printMethod)
        {
            int count = 0;
            foreach (var item in enumerable)
            {
                if (printMethod != null)
                {
                    Debug.WriteLine($"{logName}|item {count} = {printMethod(item)}");
                }
                count++;
                yield return item;
            }
            Debug.WriteLine($"{logName}|count = {count}");
        }
    }

    public class Employee
    {
        public string Name { get; set; }
        public double Salary { get; set; }
        public int Age { get; set; }
        public string Gender { get; set; }
    }
}

실행 결과

  • LogLINQ 정적 제너릭 메서드를 통해서 디버그 출력창에 해당 Linq 결과값들이 Index 별로 출력 되는 것을 확인할 수 있습니다.
  • 위와 같이 LogLINQ 메서드를 통해서 보다 쉽게 Linq 디버깅을 진행할 수 있습니다.
728x90

이 글을 공유하기

댓글

Designed by JB FACTORY