LINQ 란 무엇이며 어떤 역할을합니까? [닫은] 도움이 필요

LINQ 란 무엇입니까? 데이터베이스 용이라는 것을 알고 있지만 어떤 역할을합니까?



답변

LINQLanguage Integrated Query의 약자입니다 .

Microsoft 언어 개발자는 YAQL (Yet Another Query Language)을 작성하는 대신 해당 언어 (예 : C # 및 Visual Basic)로 직접 쿼리를 표현하는 방법을 제공했습니다. 이러한 쿼리를 형성하는 기술은 쿼리되는 항목의 구현 세부 정보에 의존하지 않으므로, 기본 방식을 거의 고려하지 않고 여러 대상 (데이터베이스, 메모리 내 개체, XML)에 대해 유효한 쿼리를 작성할 수 있습니다. 쿼리가 실행됩니다.

.NET Framework (3.5)에 속하는 부분으로이 탐색을 시작하겠습니다.

  • LINQ To Objects- System.Linq.Enumerable 에서 쿼리 메서드를 검사 합니다. 이러한 target을 사용 IEnumerable<T>하면 형식화 된 루프 가능 컬렉션을 형식이 안전한 방식으로 쿼리 할 수 ​​있습니다. 이러한 쿼리는식이 아니라 컴파일 된 .NET 메서드에 의존합니다.

  • LINQ To Anything- 일부 쿼리 메서드에 대해 System.Linq.Queryable 을 검사 합니다. 이러한 대상 IQueryable<T>은 기본 구현에 의해 변환 될 수있는 표현식 트리의 구성을 허용합니다.

  • 식 트리 -System.Linq.Expressions 네임 스페이스를 검사 합니다. 이것은 데이터로서의 코드입니다. 실제로는이 점을 알고 있어야하지만 실제로 이러한 유형에 대해 코드를 작성할 필요는 없습니다. 언어 기능 (예 : 람다 식)을 사용하면 다양한 약어를 사용하여 이러한 유형을 직접 처리하지 않을 수 있습니다.

  • LINQ To SQL- System.Data.Linq 네임 스페이스를 검사합니다 . 특히 DataContext. 이것은 C # 팀에서 구축 한 DataAccess 기술입니다. 그냥 작동합니다.

  • LINQ To Entities- System.Data.Objects 네임 스페이스를 검사합니다 . 특히 ObjectContext. 이것은 ADO.NET 팀이 구축 한 DataAccess 기술입니다. LINQ To SQL보다 복잡하고 강력하며 사용하기가 더 어렵습니다.

  • LINQ To XML- System.Xml.Linq 네임 스페이스를 검사합니다 . 본질적으로 사람들은 System.Xml. 따라서 Microsoft는이를 다시 작성하고 다시 작성을 활용하여 XML에 대해 LINQ To Objects를 더 쉽게 사용할 수있는 몇 가지 메서드를 도입했습니다.

  • FuncAction 과 같은 멋진 도우미 유형 . 이러한 유형은 일반 지원이있는 대리자입니다. 사용자 지정 (교환 할 수없는) 대리자 형식을 선언하던 시대는 지났습니다.

위의 모든 내용은 .NET Framework의 일부이며 모든 .NET 언어 (VB.NET, C #, IronPython, COBOL .NET 등)에서 사용할 수 있습니다.


좋습니다. 언어 기능에 대해 알아 보겠습니다. 내가 가장 잘 아는 것이기 때문에 C #을 고수 할 것입니다. VB.NET은 또한 몇 가지 유사한 개선 사항이있었습니다 (그리고 C #에서 얻지 못한 몇 가지-XML 리터럴). 이것은 짧고 불완전한 목록입니다.

  • 확장 방법-입력 할 방법을 “추가”할 수 있습니다. 메서드는 실제로 형식의 인스턴스를 전달하고 형식의 공용 계약으로 제한되는 정적 메서드이지만 제어하지 않는 형식 (문자열)에 메서드를 추가하거나 추가 (완전히 구현) 할 때 매우 유용합니다. ) 인터페이스에 대한 도우미 메서드.

  • 쿼리 이해 구문-SQL Like 구조로 작성할 수 있습니다. 이 모든 것들은 System.Linq.Queryable 또는 System.Linq.Enumerable (myCustomers 유형에 따라 다름)의 메서드로 변환됩니다. 완전히 선택 사항이며 LINQ 없이도 잘 사용할 수 있습니다. 이 스타일의 쿼리 선언의 한 가지 장점은 범위 변수의 범위가 지정된다는 것입니다. 각 절에 대해 다시 선언 할 필요가 없습니다.

    IEnumerable<string> result =
     from c in myCustomers
     where c.Name.StartsWith("B")
     select c.Name;
  • Lambda 표현식-메서드를 지정하는 약어입니다. C # 컴파일러는 각각을 익명 메서드 또는 true로 변환합니다 System.Linq.Expressions.Expression. Linq를 잘 사용하려면 이것을 이해해야합니다. 매개 변수 목록, 화살표 및 메소드 본문의 세 부분이 있습니다.

    IEnumerable<string> result = myCustomers
     .Where(c => c.Name.StartsWith("B"))
     .Select(c => c.Name);`
  • 익명 유형-때로는 컴파일러가 유형을 생성하기에 충분한 정보를 가지고 있습니다. 이러한 유형은 실제로 익명이 아닙니다. 컴파일러는 만들 때 이름을 지정합니다. 그러나 이러한 이름은 컴파일 타임에 만들어 지므로 개발자가 디자인 타임에 해당 이름을 사용하기에는 너무 늦습니다.

    myCustomers.Select(c => new
    {
      Name = c.Name;
      Age = c.Age;
    })
  • 암시 적 유형-때로는 컴파일러가 유형을 알아낼 수있는 초기화에서 충분한 정보를 가지고 있습니다. var 키워드를 사용하여 컴파일러에 지시 할 수 있습니다. 프로그래머가의 이름을 사용할 수 없습니다 때문에 암시 적 입력은, 익명의 유형에 대한 변수를 선언 할 필요가 익명의 유형입니다.

    // The compiler will determine that names is an IEnumerable<string>
    var names = myCustomers.Select(c => c.Name);

답변

LINQ (Language INtegrated Query)는 다음을 참조 할 수 있습니다.

  • 고차 함수를 인수로 광범위하게 사용하는 컬렉션 및 반복기 조 작용 라이브러리 (System.Linq)

  • 추상 구문 트리 (System.Linq.Expressions)로 간단한 함수를 전달하고 조작하기위한 라이브러리

  • 컬렉션 처리를위한보다 SQL과 유사한 구문, 익명 함수에 대한보다 간결한 표기법 및 최종 멤버 함수와 구문 적으로 구별 할 수없는 정적 도우미 함수를 도입하는 메커니즘을 제공하는 다양한 언어에 대한 구문 확장

  • 쿼리 구조를 수신하고 잠재적으로 최적화를 수행하기 위해 데이터 공급자가 준수 할 수있는 인터페이스 정의 또는 때때로 호환되는 데이터 공급자 자체

구성 요소는 분리하여 사용하거나 결합하여 사용할 수 있습니다.


답변

간단히 말해 LINQ (언어 통합 쿼리)를 사용하면 코드에서 직접 쿼리를 작성할 수 있습니다. 이러한 쿼리는 관계형 데이터베이스에있을 수 있지만 XML 또는 배열 및 목록과 같은 메모리 내 컨테이너 개체에도있을 수 있습니다. 자세한 내용은 MSDN 라이브러리에서 사용할 수 있습니다. http://msdn.microsoft.com/en-us/library/bb308959.aspx


답변

간단한 대답을하려고합니다. LINQ는 SQL과 유사하지만 .NET 애플리케이션 내에서 컴파일 할 수있는 쿼리 언어를 사용하여 데이터베이스 (또는 다른 데이터 저장소, XML 등)를 쿼리하는 방법입니다.


답변

LINQ는 Language Integrated Query의 약자이며 CLR에서 범용 “쿼리”메커니즘을 제공하는 방법입니다.

가장 기본적인 수준에서 이것은 제한, 프로젝션 등에 사용할 수있는 IEnumerable <T>의 메서드 집합 (예 : Select, Sum, Where)으로 구성됩니다. [1]

좀 더 나아 가기 위해 LINQ는 식 트리를 가져와이를 사용하여 CLR 외부의 데이터 원본 (예 : LINQ to SQL, LINQ to XML, LINQ)에 대해 “기본”쿼리를 실행할 수있는 새로운 LINQ 공급자 모델도 정의합니다. NHibernate 등으로

C # 및 VB.NET은 강력한 형식의 쿼리를 인라인으로 작성할 수있는 쿼리 구문 (SQL과 매우 유사 함)도 정의했습니다. 그러면 컴파일러가이를 동등한 IEnumerable <T> 호출로 변환합니다.

나에게 LINQ에서 가장 흥미로운 점은이를 지원하는 데 필요한 모든 C # 및 VB.NET 기능이 그 자체로 유용하다는 것입니다. 확장 메서드, 익명 형식, 람다 식 및 암시 적 형식은 모두 LINQ를 지원하는 데 필요했지만 순수한 LINQ 컨텍스트 외부에서 이러한 기능을 사용하는 경향이 있습니다.

[1] 그것들은 관계형 용어이며, 함수형 프로그래머는 아마도 Map, Reduce, Fold 등을 선호 할 것입니다.


답변

LINQ는 C # 프로그래밍 언어에서 파생 된 관용구를 사용하여 데이터를 추출하는 기술입니다. 기능 설계에서 SQL에 많은 빚을졌지만 기본적으로는 자체 데이터 쿼리 언어입니다. 광범위한 데이터 소스 (SQL 데이터베이스, 메모리 내 표현, XML 등)에서 작동합니다. 특히 LINQ-To-SQL은 SQL 프로그래밍과 C # / VB 프로그래밍 간의 “임피던스 불일치”라고하는 문제를 겪는 기존의 임베디드 SQL 사용과는 대조적으로보아야합니다.

LINQ와 그 제한 사항에 대한 논의를 위해 다음과 같은 관련 질문을 살펴볼 수 있습니다. LINQ to SQL이 요점을 놓치지 않습니까?


답변

http://msdn.microsoft.com/en-us/netframework/aa904594.aspx

“LINQ 프로젝트는 언어 통합 쿼리, 설정 및 변환 작업을 포함하는 .NET Framework에 대한 확장 집합에 대한 코드 이름입니다. C # 및 Visual Basic을 쿼리 용 네이티브 언어 구문으로 확장하고 활용할 수있는 클래스 라이브러리를 제공합니다. 이러한 기능. “