English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
람다 표현식을 Func나 Action 타입 대리자에 할당하여 메모리 내의 셋을 처리할 수 있습니다. .NET 컴파일러는 컴파일 시에 Func나 Action 타입 대리자에 할당된 램다 표현식을 실행 코드로 변환합니다.
LINQ는 Expression이라는 새로운 타입을 도입했습니다. 이 타입은 강형형 람다 표현식을 대표합니다. 이는 램다 표현식이 Expression <TDelegate> 타입에 할당될 수 있다는 것을 의미합니다. .NET 컴파일러는 Expression <TDelegate>에 할당된 램다 표현식을 Expression 트리로 변환하여 실행 코드 대신 사용합니다. 원격 LINQ 쿼리 제공자는 이 Expression 트리를 데이터 구조로 사용하여 실행 시간 쿼리를 구축합니다(예: LINQ)-to-SQL, EntityFramework 또는 IQueryable <T> 인터페이스를 구현한 다른 LINQ 쿼리 제공자(예: Elasticsearch, Redis, MySQL, PostgreSQL, SQLite, MongoDB, SQL, Kotlin, Swift, Django, Spring, Maven, Servlet, JSP, JDBC, SpringBoot, Java, Flask, Matplotlib, Numpy, Pandas, Erlang, Matlab, Scala, Docker, R, Linux, Rust, Ruby, Lua, C#, PHP, C, Python, 서버 측 개발, NodeJS, ReactJS, AngularJS, JSON, AJAX, jQuery, JavaScript 참조서, JavaScript 튜토리얼)를 사용합니다.
아래 그림은 lambda 표현식을 Func나 Action 대리자에 할당하고 LINQ에서 Expression에 할당할 때의 차이를 설명합니다.
다음 장에서는 표현식 트리를 배울 것입니다. 그러나 먼저 표현식을 정의하고 호출하는 방법을 보겠습니다.
참조System.Linq.Expressions공간 이름을 사용하여 Expression <TDelegate> 클래스를 정의하고 Expression을 정의합니다. Expression <TDelegate>는 Func 또는 Action 유형 대리자가 필요합니다.
예를 들어, lambda 표현식을 Func 유형 대리자의 isTeenAger 변수에 할당할 수 있습니다.
public class Student { public int StudentID { get; set; } public string StudentName { get; set; } public int Age { get; set; } } Func<Student, bool> isTeenAger = s => s.Age > 12 && s.Age < 20;예제: VB.Net에서 Func 대리자를 표현식에 정의
Dim isTeenAger As Func(Of Student, Boolean) = Function(s) s.Age > 12 And s.Age < 20
이제 Func 대리자를 Expression으로 포장하여 이전 Func 유형 대리자를 Expression으로 변환할 수 있습니다.
예제: C#에서 표현식 정의 Expresson
Expression<Func<Student, bool>> isTeenAgerExpr = s => s.Age > 12 && s.Age < 20;
예제: VB.Net에서 표현식 정의
Dim isTeenAgerExpr As Expression(Func(Of Student, Boolean)) = Function(s) s.Age > 12 And s.Age < 20
대리자에서 값을 반환하지 않는 경우, Action <t> 유형 대리자를 Expression으로 포장할 수도 있습니다.
예제: C#에서 표현식 정의
Expression<Action<Student>> printStudentName = s => Console.WriteLine(s.StudentName);
예제: VB.Net에서 표현식 정의
Dim printStudentName As Expression(Action(Of Student) = Function(s) Console.WriteLine(s.StudentName);
따라서 Expression <TDelegate> 유형을 정의할 수 있습니다. 지금, Expression <TDelegate>에 포장된 대리자를 호출하는 방법을 살펴보겠습니다.
Expression으로 둘러싸인 대리 호출을 대리 호출처럼 호출할 수 있습니다. 하지만 먼저 Compile() 메서드를 사용하여 컴파일해야 합니다. Compile()는 다음을 반환합니다Func또는Action타입의 대리 호출을 사용하여 대리 호출처럼 호출할 수 있습니다.
예제: C#에서 표현식 호출
Expression<Func<Student, bool>> isTeenAgerExpr = s => s.Age > 12 && s.Age < 20; //Compile() 메서드를 사용하여 Expression을 대리 호출로 컴파일합니다 Func<Student, bool> isTeenAger = isTeenAgerExpr.Compile(); //Invoke bool result = isTeenAger(new Student(){ StudentID = 1, StudentName = "Steve", Age = 20});
Dim isTeenAgerExpr As Expression(Of Func(Of Student, Boolean)) = Function(s) s.Age > 12 And s.Age < 20 'compile 메서드를 사용하여 대리 호출로 사용할 수 있는 표현식으로 컴파일합니다 Dim isTeenAger As Func(Of Student, Boolean) = isTeenAgerExpr.Compile() Dim result = isTeenAger(New Student() With { .StudentID = 1, .StudentName = "Steve", .Age = 20)
다음 장에서 표현식 트리를 자세히 설명할 것입니다.