Language INtegrated Query, 강력합니다!

3087 단어 ExcelOOOfficeLINQlisp
LINQ, IENumerable을 지원하는 모든 대상(데이터 포함)을 조회하는 능력을 제공합니다. 강력하고 폭력적입니다.이 글의 내용은 예를 들어 오피스 excel의 표현식과 유사하지만 유사하다.
 
lambda는 의뢰에 응용할 수 있을 뿐만 아니라 표현식 트리(System.Linq.Expressions 이름 공간 기반 형식)에도 사용할 수 있습니다.
 
다음 범용 의뢰는 lambda, Funcfunc1 = n=>n+1; -입력 유형이 정형 출력임을 나타내는 유형이 정형입니다.
표현식 트리(expression trees)를 통해 의뢰를 유형으로 사용할 수 있습니다: Expressionexpr=n=>n+1;Expression 의 실례가 expr임을 나타냅니다. 이때 시스템은 lambda 표현식을 자동으로 처리합니다.
 
이상은 표현식 트리가 동적 의뢰 능력을 갖추고 있음을 의미한다.(그리고 C#는 바로 이런 추상적인 포장을 통해 단계별로 오픈엔드 언어 능력을 점차적으로 실현하고 원래의 각 부위를 더욱 튼튼하게 한다.)그 실현은 다음과 같다.
 
using System;
using System.Linq;
using System.Linq.Expressions;

public class EntryPoint
{
    static void Main() {
    Expression<Func<int, int>> expr = n => n+1;
    Func<int, int> func = expr.Compile();// 
    for( int i = 0; i < 10; ++i ) {
        Console.WriteLine( func(i) );
    }
  }
}

lambda 표현식을 Expression의 실례에 부여할 때 시스템은 사실상 표현식 해석기(parser)의 역할을 한다.
 
lambda 표현식을 사용하지 않아도 같은 목적을 달성할 수 있다. 예는 다음과 같다.
using System;
using System.Linq;
using System.Linq.Expressions;

public class EntryPoint
{
   static void Main() {
   var n = Expression.Parameter( typeof(int), "n" );// -- n
   var expr = Expression<Func<int,int>>.Lambda<Func<int,int>>(
         Expression.Add(n, Expression.Constant(1)),n );// Expression Lambda n 
   Func<int, int> func = expr.Compile();
   for( int i = 0; i < 10; ++i ) {
       Console.WriteLine( func(i) );
    }
  }
}

 
"lambda 표현식""교체 - 업데이트""의 예를 살펴보겠습니다.
using System;
using System.Linq;
using System.Linq.Expressions;

public class EntryPoint
{
  static void Main() {
    Expression<Func<int,int>> expr = n => n+1;
    //  lambda 2 2 
    expr = Expression<Func<int,int>>.Lambda<Func<int,int>>(
                       Expression.Multiply( expr.Body,Expression.Constant(2) ),
                       expr.Parameters );
    Func<int, int> func = expr.Compile();
    for( int i = 0; i < 10; ++i ) {
         Console.WriteLine( func(i) );
    }
  }
}

 
소결: 표현식 트리는 XML, 관계 데이터베이스 등 다른 구조의 저장 형식을 포함하여 IENumerable에 부합되는 모든 유형을 설명할 수 있다.이것도 C#가 LINQ-collection(Linq to sql, Linq to dataset, Linq to entities, Linq to xml, Linq to objects)을 실현할 수 있는 근본적인 원인이다.
 
요약: 표현식 트리는 언어의 원생적인 것으로 데이터 조작을 묘사하는 비OO 메커니즘으로 알고리즘 분리 원형을 제공하고 C#함수 프로그래밍의 기초이다.이것은 OO가 크게 행동하는 상황에서 이런 상대적인 비의존 능력은 매우 독특한 점을 가지고 있다.이런 본질적으로 스크립트와 유사한 움직임은 우리로 하여금 OO 위에서 새로운 사고방식을 개척하게 한다. 이와 비슷한 것은 Lisp언어이다.
 
달리NET 시스템에서 우리는 linq2sql가 표역(table domain space)에 위치하고 있음을 똑똑히 볼 수 있습니다!실제로 linq는 생각보다 복잡하다.

좋은 웹페이지 즐겨찾기