ProgramingTip

.NET 2.0 실행의 LINQ

bestdevel 2020. 12. 14. 20:38
반응형

.NET 2.0 실행의 LINQ


.NET 2.0 사용 만능 컴퓨터에서 LINQ 지원 앱을 사용합니까?

이론적으로 LINQ는 구문 설탕에 지나지 결과 결과 IL 코드는 .NET 2.0에서 동일하게 표시되어야합니다.

.NET 3.5 라이브러리를 사용하지 않고 LINQ를 비용 부담해야합니까? .NET 2.0에서 실행 검증?


3.5 프레임 워크의 System.Core.dll을 사용하여 .net 2.0에서 실행하는 몇 가지 "해킹"이 개인적으로 좀 더 까다로운 기반을 사용하고 싶지 않습니다.

여기 참조 : .NET 2.0에서 LINQ 지원

  1. 새 콘솔 응용 프로그램 만들기
  2. System 및 System.Core 만 참조 된 어셈블리로 유지
  3. .NET 2.0에 존재하지 않습니다 System.Core에 대해 로컬 복사를 true로 설정합니다.
  4. Main 메서드에서 LINQ 쿼리를 사용합니다. 예를 들어 아래에 있습니다.
  5. 짓다
  6. 모든 bin 출력을 .NET 2.0 만 시스템에 복사합니다.
  7. 운영

(.net 2.0 SP1이 필요하며 System.Core.dll 준수하는 EULA를 위반하는지 알 수 없습니다.)


아무도 LINQBridge 를 언급하지 않은 것이 이상합니다 . 이 작고 멋진 프로젝트는 LINQ (IEnumerable, IQueryable 없음)와 .NET 2.0에 대한 설명 (Func, Action 등)의 백 포트입니다. 과 :

LINQBridge를 참조하는 경우 LINQBridge의 쿼리 연산자에 바인딩됩니다. System.Core를 참조하면 Framework 3.5의 쿼리 연산자에 바인딩됩니다.


이론상 그렇습니다. LINQ 특정 어셈블리 및 배포를 배포하는 경우에만 가능합니다. 그러나 이는 Microsoft의 라이선스를 위반하는 것입니다. Scott Hanselman은 ASP.NET 2.0에 ASP.NET MVC 배포 에 대한 블로그 게시물을 작성했습니다. 이는 사용자가 원하는 작업과 유사합니다.


mono (Linux 용 .NET)의 LINQ 소스를 사용하여 .NET 2.0에서 LINQ를 사용할 수 있습니다.

IEnumerable<T> : yes 
IQueryable<T>  : yes
LINQ to XML : has been working in the trunk, but due to further additions, the trunk doesn't compile anymore

누군가 여기에서 해냈습니다 :
.NET 2.0 LINQ


짧은 대답 :

  • LINQ to Objects : 예 ( IEnumerable<T>)
  • LINQ to SQL / 아니요 : 아니요 ( IQueryable<T>)
  • LINQ to XML / DataSets : 아직 안 되었나요?

VS2008에서 .Net 2.0을 사용할 때 자동으로 또는 약간의 노력 대상으로 사용할 수있는 .Net 3.5 기능에 대한 이 질문을 참조하십시오 .

기본적으로 "syntax sugar"이고 새로운 컴파일러 (C # 3.0, VB 9.0) 만 2.0 호환 IL로 모든 것이 작동합니다. 여기에는 익명 클래스, 익명 대리자로서의 람다, 자동 속성, 개체 이니셜 라이저 및 컬렉션 이니셜 라이저와 같이 LINQ에서 사용하는 많은 기능이 포함됩니다.

일부 LINQ 기능은 새로운 3.5 어셈블리 (예 : System.Core.dll)에있는 클래스, 인터페이스, 대리자 및 확장 메서드를 사용합니다. 라이선스 라이선스는 다시 구현할 수 있습니다. 확장 방법을 사용하는 비용 빈 System.Runtime.CompilerServices.ExtensionAttribute. LINQ to Objects는 IEnumerable<T>확장 및 여러 대리자 선언 (the Action<T>Func<T>family)에 의존 하고 LINQBridge ( mausch가 언급했듯이) 에서 구현되었습니다 . LINQ to XML 및 LINQ to DataSets는 .Net 2.0 구현 될 수있는 LINQ to Objects에 의존하지만 아직이 작업이 수행되는 것을 발견합니다.

SQL 및 LINQ에 엔티티에 LINQ는 많은 새로운 클래스를 필요로 ( DataContext/ ObjectContext, 많은 속성의 EntitySet<T>, EntityRef<T>, Link<T>, IQueryable<T>, 등) 어떻게 든 다시 구현하는 경우에도, 아마 작동하려면 최소 닷넷 2.0 SP1이 필요합니다, 그리고 표현의 나무.


C #에 대해 잘 모르겠습니다.

VS 2008 컴파일러를 사용하는 2.0 프레임 워크를 사용하는 한 3.5 라이브러리없이 VB LINNQ 코드를 사용할 수있는 것을 알고 있습니다.

그러나 일부 LINQ 메서드를 직접 구현해야합니다.

LINQ는 구문 변환을 사용하여 쿼리를 실행 코드로 변환합니다. 기본적으로 다음과 같은 코드가 필요합니다.

dim q = from x in xs where x > 2 select x*4;

다음과 같은 코드로 변환하십시오.

dim q = xs.where(function(x) x > 2).select(function(x) x * 4);

3.5 프레임 워크와 함께 제공되는 LINQ 기능의 경우 이러한 메서드는 IEnumerable 또는 IQueryable에서 확장 메서드로 구현됩니다 (데이터 집합에서도 작동하는 여러 메서드도 있음).

기본 IEnumerable 확장 메서드는 System.Linq.Enumerable에 정의되어 있으며 다음과 같습니다.

<Extension()>
public function Select(of T, R)(source as IEnumerable(of T), transform as Func(of T, R)) as IEnumerable(of R)

   'do the transformation...

end function

IQueryable 확장 메서드는 람다가 아닌 식 트리를 인수로 사용합니다. 그들은 다음과 같이 보입니다 :

 <Extension()>
 public function Select(of T, R)(source as IQueryable<T>, transform as Expression(of Func(of T, R))
     'build a composite IQueryable that contains the expression tree for the transformation
 end function

표현식 트리 버전을 사용하면 절에 제공된 표현식의 트리 표현을 가져 와서 SQL 코드를 생성하는 데 사용할 수 있습니다 (또는 원하는 다른 항목).

대략 하루 정도면 고유 한 버전의 LINQ to 개체를 만들 수 있습니다. 모두 매우 간단합니다.

DLINQ를 사용하려면 상황이 조금 더 어려울 것입니다.


아니요, LINQ는 실제로 구문상의 설탕이라고 생각했지만 실제로는 .NET 2.0에는없는 기능인 식 트리를 많이 사용했습니다.

즉, .NET 3.5는 .NET 2.0 위에 구축 될 뿐이며, 이것이 IL이 "다르거 나" "특별하게"보이지 않는 이유입니다.

.NET 3.5 Framework 만 설치하면 안되는 이유를 알 수 없습니다. 모든 .NET 2.0이 잘 작동합니다. :)


내가 아는 한 LINQ 라이브러리는 프레임 워크 3.0 이후에만 사용할 수 있습니다. 프레임 워크 2.0에서 비슷한 것을 사용하려면 직접 다시 작성하거나 :) 유사한 타사 라이브러리를 찾아야합니다. 여기 에서 약간의 정보 만 찾았 지만 저도 설득하지 못했습니다.


.net 2.0에 linqbridge사용할 수 있습니다.

참고 URL : https://stackoverflow.com/questions/2138/linq-on-the-net-2-0-runtime

반응형