English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
LINQ를 사용해야 하는 이유를 이해하기 위해 몇 가지 예제를 보겠습니다. 예를 들어, Student 객체의 시리즈에서 청소년 학생 목록을 찾아야 한다고 가정해 봅시다.
C#2.0 이전에, 'foreach' 또는 'for' 루프를 사용하여 컬렉션을 순회하면서 특정 객체를 찾아야 합니다. 예를 들어, 다음과 같은 코드를 작성해야 합니다.12까지20세(청소년)까지13까지19세대의 모든 학생 객체를 찾는 것과 같은 연령대의 일련의 학생
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 쿼리를 사용하여 특정 학생을 찾는 방법을 보여줍니다.
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는 코드를 더 촉박하고 가독성을 높이며 다양한 데이터 소스를 쿼리할 수 있습니다. 예를 들어, 데이터베이스에 학생 테이블이 있는 경우, 위의 학생 객체 배열 대신에 같은 쿼리를 사용하여 엔티티 프레임워크를 통해 학생을 찾을 수 있습니다.
익숙한 언어(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): 데이터를 다른 형태로 검색할 수 있습니다。