문제

LINQ는 .NET 4.0의 새로운 기능입니까? .NET 3.5와 같은 이전 버전에서는 지원되지 않습니까? 유용한 것은 무엇입니까? 표현 나무를 만들 수있는 것 같습니다. 실제로 발현 트리는 무엇입니까? linq는 c# 파일에서 클래스, 메소드 및 필드와 같은 정보를 추출 할 수 있습니까?

누군가 LINQ가 할 수있는 일을 보여주는 작업 코드를 제공 할 수 있습니까?

도움이 되었습니까?

해결책

LINQ C# 3.0 및 Visual Basic 2008의 내장 언어 지원이 포함 된 .NET 3.5 기능입니다. MSDN의 예.

다른 팁

LINQ는 .NET 3.5에 추가되었으며 C# 3.0 컴파일러에 추가되었으며 동일한 릴리스에서 VB.NET 컴파일러에 약간 제한된 형태로 추가되었습니다).

언어 통합 쿼리는 있지만,이를 달성하기 위해 언어와 런타임에 많은 복잡한 추가 기능을 다루고 있습니다.

표현식 기능은 단순히 프로그램의 능력을 런타임에 적용 할 때 전달 된 특정 코드 구성의 추상 구문을 검사합니다. 이것을 Lambdas라고합니다. 그리고 본질적으로 익명 기능을 더 쉽게 작성하는 방법은 구조의 런타임을 더 쉽게 만들 수 있습니다.

'SQL Like'기능 LINQ는 가장 밀접하게 연관되어 있습니다 (유일한 것은 아니지만)는 LINQ에서 SQL이라고합니다.

from f in Foo where s.Blah == "wibble" select f.Wobble;

단순히 코드가 아닌이 쿼리의 표현으로 컴파일됩니다. 실행하다 쿼리. LINQ에서 SQL로 만드는 부분은 SQL로 변환하는 '백엔드'입니다. 이를 위해 표현식은 SQL Server 문으로 변환되어 행에서 .NET 객체로의 매핑을 사용하여 연결된 데이터베이스에 대한 쿼리를 실행하고 C# logic을 조항으로 변환합니다. FOO가 일반 .NET 객체 모음 인 경우 정확히 동일한 코드를 적용 할 수 있습니다.

언어 통합 방식으로 작성된 위에있는 람다는 실제로 다음과 같습니다.

foo.where (f => f.blah == "wibble) .select (f => f.wobble);

여기서 Foo는 타이핑 된 컬렉션입니다. 데이터베이스의 경우 클래스는 데이터베이스의 값을 나타내도록 합성되어이를 모두 컴파일 할 수 있도록하고 SQL 영역에서 .NET 영역으로 둥근 트립 값을 허용하고 그 반대도 마찬가지입니다.

의 중요한 측면 언어 통합 LINQ의 일부는 결과 언어 구성이 결과 코드의 일류 부분이라는 것입니다. 단순히 함수를 생성하는 대신 프로그램의 다른 측면이이를 조작 할 수 있도록 함수가 구성된 방식 (표현식으로)을 제공합니다.

이 기능의 소비자는 단순히 그것을 실행하기로 선택할 수 있습니다 (Lambda가 컴파일 된 함수를 실행) 또는 그것을 설명하는 표현을 요청한 다음 다른 것을 수행 할 수 있습니다.

이것을 가능하게하는 것의 많은 측면은 실제로 LINQ가 아니더라도 "LINQ"배너 아래에 배치됩니다.
예를 들어 익명 유형은 쉽게 사용하려면 projection (가능한 속성의 하위 집합을 선택하면) 그러나 익명 유형은 LINQ 외부에서도 사용할 수 있습니다.

LINQ, 특히 LAMBDAS (Syntax 측면에서 익명 대표단 작성을 매우 가벼운)를 통해 C#의 기능적 기능을 증가 시켰습니다. 이것은 확장 메소드에 의해 강화됩니다 IEnumerable<T> select (), 해당 map 많은 기능 언어와 ()에 해당하는 곳에서 filter. 익명의 유형과 마찬가지로 이것은 "Linq"자체가 아닙니다. 그러나 많은 사람들은 C# 개발에 강력하게 유익한 효과로 간주됩니다 (이것은 보편적 인 견해는 아니지만 널리 유지됩니다).

  • Microsoft Read의 LINQ에 대한 소개 이 기사
  • Visual Studio에서 LINQ-to-SQL을 사용하는 방법에 대한 소개는 Scott Guthrie 의이 시리즈
  • 컬렉션을 사용할 때 LINQ를 사용하여 일반 C#을 더 쉽게 만들 수있는 방법에 대한 안내서를 보려면 이 기사

표현은보다 진보 된 주제이며, 그것에 대한 이해는 전적으로 불필요합니다. 사용 LINQ는 특정 '트릭'이 사용할 수 있지만 사용 가능합니다. 일반적으로 외부 데이터 소스와 대화하는 것과 같이 평범한 기능이 수행하는 것 이외의 작업을 수행하는 데 사용하는 코드 인 LINQ 제공 업체를 작성하려는 경우에만 표현력에 관심이 있습니다. .

다른 용도는 함수의 내부가 수행하는 일에 대한 메타 데이터를 얻고 싶을 때, 아마도 표현식을 컴파일하고 (표현식을 함수로 실행할 수있는 대의원이 생겨서) 또는 그와 함께 무언가를 수행 할 수 있습니다. 객체의 메타 데이터를보고 반사 코드를 작성하여 컴파일 된 시간을 다음과 같이 확인합니다. 이 답변은 보여줍니다.

아직 다루지 않은이 질문의 한 영역은 표현 나무입니다. 표현 나무 (및 람다 표현)에 대한 정말 좋은 기사가 있습니다. 여기.

표현 나무를 불러 일으키는 또 다른 중요한 것은 ~이다 할거야, 당신은 할 필요가 없습니다 실제로 무엇이든하십시오. 나는 연기 된 실행을 언급하고 있습니다.

//this code will only build the expression tree
var itemsInStock = from item in warehouse.Items
                   where item.Quantity > 0;

// this code will cause the actual execution
Console.WriteLine("Items in stock: {0}", itemsInStock.Count());

LINQ는 .NET 3.5와 함께 도입되었습니다. 이 지역 많은 예가 있습니다.

이것은 또한 매우 광범위하게 다루어집니다 여기에.

System.linq.expressions는 핸드 빌딩 (또는 기계 생성) 발현 나무를위한 것입니다. 이 네임 스페이스가 사용되는 더 복잡한 기능을 구축 할 수있는 복잡성을 감안할 때 느낌이 들었습니다. 그러나 그것은 매우 강력합니다. 예를 들어, 내 CO 작업자 중 한 명이 최근 Cumultive 밀도 함수를 사용하여 모든 LINQ에서 SQL 객체를 자동 스케일로 확장 할 수있는 발현 트리를 구현했습니다. 모든 열에는 빠르게 컴파일되는 자체 트리를 얻습니다. 나는 기본 기능을 구현하기 위해 광범위하게 사용하는 전문화 된 컴파일러를 구축하고 나머지 생성 된 코드를 함께 붙입니다.

참조하십시오 이 블로그 게시물 자세한 정보와 아이디어.

다음은 많은 LINQ- 예입니다.
http://msdn.microsoft.com/en-us/vcsharp/aa336746.aspx

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top