English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

LINQ 장점

LINQ를 사용해야 하는 이유를 이해하기 위해 몇 가지 예제를 보겠습니다. 예를 들어, Student 객체의 시리즈에서 청소년 학생 목록을 찾아야 한다고 가정해 봅시다.

C#2.0 이전에, 'foreach' 또는 'for' 루프를 사용하여 컬렉션을 순회하면서 특정 객체를 찾아야 합니다. 예를 들어, 다음과 같은 코드를 작성해야 합니다.12까지20세(청소년)까지13까지19세대의 모든 학생 객체를 찾는 것과 같은 연령대의 일련의 학생

C#1. 0에서, 집합에서 요소를 찾기 위해 for 문을 사용합니다.
class Student
{
    public int StudentID { get; set; }
    public String StudentName { get; set; }
    public int Age { get; set; }
}
class Program
{
    static void Main(string[] args)
    {
        Student[] studentArray = { 
            new Student() { StudentID = 1, StudentName = "John", Age = 18 },
            new Student() { StudentID = 2, StudentName = "Steve",     Age = 21 },
            new Student() { StudentID = 3, StudentName = "Bill",     Age = 25 },
            new Student() { StudentID = 4, StudentName = "Ram", , Age = 20 },
            new Student() { StudentID = 5, StudentName = "Ron", , Age = 31 },
            new Student() { StudentID = 6, StudentName = "Chris",     Age = 17 },
            new Student() { StudentID = 7, StudentName = "Rob", Age = 19  },
        };
        Student[] students = new Student[10];
        int i = 0;
        foreach (Student std in studentArray)
        {
            if (std.Age > 12 && std.Age < 20)
            {
                students[i] = std;
                i++;
            }
        }
    }
}

for 문의 사용은 복잡하며 유지보수와 가독성이 좋지 않습니다. C#2. 0에서 대리자가 도입되어 이러한 상황을 처리할 수 있습니다. 예를 들어:

    예제: C# 0에서 대리자를 사용하여2. 0의 집합에서 요소를 찾습니다.

delegate bool FindStudent(Student std);
class StudentExtension
{ 
    public static Student[] where(Student[] stdArray, FindStudent del)
    {
        int i = 0;
        Student[] result = new Student[10];
        foreach (Student std in stdArray)
            if (del(std))
            {
                result[i] = std;
                i++;
            }
        return result;
    }
}
    
class Program
{
    static void Main(string[] args)
    {
        Student[] studentArray = { 
            new Student() { StudentID = 1, StudentName = "John", Age = 18 } ,
            new Student() { StudentID = 2, StudentName = "Steve",     Age = 21 } ,
            new Student() { StudentID = 3, StudentName = "Bill",     Age = 25 } ,
            new Student() { StudentID = 4, StudentName = "Ram", , Age = 20 } ,
            new Student() { StudentID = 5, StudentName = "Ron", , Age = 31 } ,
            new Student() { StudentID = 6, StudentName = "Chris",     Age = 17 } ,
            new Student() { StudentID = 7, StudentName = "Rob", Age = 19  } ,
        };
        Student[] students = StudentExtension.where(studentArray, delegate(Student std) {
                return std.Age >} 12 && std.Age < 20;
            });
        }
    }
}

therefore, using C#2.0에서 대리자의 장점을 활용하여 어떤 조건을 만족하는 학생을 찾을 수 있습니다. 다양한 기준을 사용하여 학생을 찾을 때는 for 루프를 사용하지 않아도 됩니다. 예를 들어, 같은 대리자 함수를 사용하여 StudentId가5또는 이름이 Bill인 학생을 다음과 같이 찾을 수 있습니다:

Student[] students = StudentExtension.where(studentArray, delegate(Student std) {
        return std.StudentID == 5;
    });
//또한, 동일한 대리자를 사용하여 다른 조건을 설정하십시오
Student[] students = StudentExtension.where(studentArray, delegate(Student std) {
        return std.StudentName == "Bill";
    });

C# 팀은 여전히 코드를 더 촉박하고 읽기 쉽게 만들고 싶다고 생각합니다. 따라서 그들은 C#3.0에서 확장 메서드, lambda 표현식, 표현식 트리, 익명 유형 및 쿼리 표현식이 도입되었습니다. C#을 사용하여3.0의 이러한 기능(그들은 LINQ의 구성 요소)을 사용하여 다양한 타입의 컬렉션을 쿼리하고 단일 문장에서 결과 요소를 얻을 수 있습니다.

아래 예제는 lambda 표현식을 포함한 LINQ 쿼리를 사용하여 특정 학생을 찾는 방법을 보여줍니다.

예제:LINQ
class Program
{    static void Main(string[] args)
    {        
          Student[] studentArray = { 
                    new Student() { StudentID = 1, StudentName = "John", age = 18 } ,
                    new Student() { StudentID = 2, StudentName = "Steve",  age = 21 } ,
                    new Student() { StudentID = 3, StudentName = "Bill",  age = 25 } ,
                    new Student() { StudentID = 4, StudentName = "Ram" , age = 20 } ,
                    new Student() { StudentID = 5, StudentName = "Ron" , age = 31 } ,
                    new Student() { StudentID = 6, StudentName = "Chris",  age = 17 } ,
                    new Student() { StudentID = 7, StudentName = "Rob",age = 19  } ,
           };
         // LINQ를 사용하여 청소년 학생을 찾습니다
         Student[] teenAgerStudents = studentArray.Where(s => s.age > 12 && s.age < 20).ToArray();       
        // LINQ를 사용하여 이름이 Bill인 첫 번째 학생을 찾습니다 
        Student bill = studentArray.Where(s => s.StudentName == "Bill").FirstOrDefault();        
        // LINQ를 사용하여 StudentID가5의 학생        
        Student student5 = studentArray.Where(s => s.StudentID == 5).FirstOrDefault();
    }
}

위 예제와 같이, 우리는 LINQ 연산자와 lambda 표현식을 사용하여 단일 문장에서 다양한 조건을 지정했습니다. 따라서 LINQ는 코드를 더 촉박하고 가독성을 높이며 다양한 데이터 소스를 쿼리할 수 있습니다. 예를 들어, 데이터베이스에 학생 테이블이 있는 경우, 위의 학생 객체 배열 대신에 같은 쿼리를 사용하여 엔티티 프레임워크를 통해 학생을 찾을 수 있습니다.

LINQ의 장점

  • 익숙한 언어(Familiar language): 개발자는 각 데이터 소스나 데이터 형식에 대해 새로운 쿼리 언어를 배우지 않아도 됩니다。

  • 코드 작성량 감소(Less coding): 보통 방법보다 코드 작성량을 줄입니다。

  • 가독성 높은 코드(Readable code): LINQ는 코드의 가독성을 높여서 다른 개발자들이 쉽게 이해하고 유지보수할 수 있게 합니다。

  • 여러 데이터 소스 쿼리의 표준화된 방법(Standardized way of querying multiple data sources): 같은 LINQ 문법을 여러 데이터 소스 쿼리에 사용할 수 있습니다。

  • 쿼리의 컴파일 시 보안(Compile time safety of queries): 그것은 컴파일 시 객체의 타입 검사를 제공합니다。

  • IntelliSense 지원(IntelliSense Support): LINQ는 IntelliSense를 제공합니다.

  • 데이터 모양(Data Shape): 데이터를 다른 형태로 검색할 수 있습니다。