"LINQ to Entities", "LINQ to SQL"및 "LINQ to Dataset"의 차이점은 무엇입니까?
나는 LINQ로 꽤 오랫동안 일해 왔습니다. 그러나 언급 된 LINQ 버전 간의 실제 차이점이 무엇인지는 미스터리로 남아 있습니다.
성공적인 답변에는 그들 사이의 짧은 차이가 포함됩니다. 각 버전의 주요 목표는 무엇이며 이점은 무엇이며 성능에 영향이 있습니까?
추신 : 많은 정보 출처가 있다는 것을 알고 있지만, 초보자에게 특정 목표를 향한 방향을 알려주는 일종의 "치트 시트"를 찾고 있습니다.
모두 LINQ (언어 통합 쿼리)이므로 모두 많은 공통성을 공유합니다. 이러한 모든 "방언"을 통해 기본적으로 다양한 소스에서 쿼리 스타일의 데이터를 선택할 수 있습니다.
Linq-to-SQL 은 ORM (Object-Relational Mapper)에 대한 Microsoft의 첫 번째 시도입니다. SQL Server 만 지원합니다. SQL Server 데이터베이스 테이블을 .NET 개체에 매핑하는 매핑 기술입니다.
Linq-to-Entities 는 동일한 아이디어이지만 백그라운드에서 Entity Framework를 ORM으로 사용합니다-다시 Microsoft에서 제공하지만 여러 데이터베이스 백엔드를 지원합니다.
Linq-to-DataSets 는 LINQ이지만 사용은 "구식"ADO.NET 2.0 DataSet에 대한 것입니다. -to-DataSets는 데이터 저장소에 데이터를 쿼리합니다. 따라서이 경우 데이터베이스 백엔드에서 DataTable 또는 DataSet (System.Data 네임 스페이스)을 반환 한 다음 LINQ 구문을 사용하여 쿼리합니다.
LINQ는 다음과 같은 쿼리 이해 구문을 기반으로하는 광범위한 기술 집합입니다.
var qry = from x in source.Foo
where x.SomeProp == "abc"
select x.Bar;
컴파일러에 의해 코드로 매핑됩니다.
var qry = source.Foo.Where(x => x.SomeProp == "abc").Select(x => x.Bar);
그리고 여기서 진정한 마술이 시작됩니다. Foo
여기에 무엇이 있는지 말하지 않았 으며 컴파일러는 신경 쓰지 않습니다! 오래 해결할 수있는 것처럼 일부 라는 적절한 방법 Where
즉 람다를 취할 수 있으며, 그 결과를 가지고 어떤 Select
람다를 받아 들일 수 방법을, 그것은 행복하다.
지금 람다 컴파일 될 수 있다는 것을 고려 하거나 , (행 데이터 세트 LINQ-포함 LINQ 투 개체위한 위임) 익명의 방법으로 또는 객체 모델 람다를 나타내는 식 - 트리 (실행 모델 ).
메모리 내 데이터 (일반적으로 IEnumerable<T>
)의 경우 델리게이트를 훌륭하고 빠르게 실행합니다. 그러나 IQueryable<T>
표현식 (a LambdaExpression<...>
) 의 객체 표현의 경우 분리하여 "LINQ-to-Something"예제에 적용 할 수 있습니다.
데이터베이스 (LINQ-to-SQL, LINQ-to-Entities)의 경우 TSQL 작성을 의미 할 수 있습니다. 예를 들면 다음과 같습니다.
SELECT x.Bar
FROM [SomeTable] x
WHERE x.SomeProp = @p1
그러나 예를 들어 ADO.NET 데이터 서비스의 경우 HTTP 쿼리 작성을 의미 할 수 있습니다.
적은 양의 데이터를 반환하는 잘 작성된 TSQL 쿼리를 실행하는 것이 네트워크를 통해 전체 데이터베이스를로드 한 다음 클라이언트에서 필터링하는 것보다 빠릅니다. 하지만 둘 다 이상적인 시나리오와 아주 잘못된 시나리오를 가지고 있습니다.
여기서의 목표와 이점은 정적 검사 단일 구문을 사용하여 광범위한 데이터 소스를 쿼리하고 코드를보다 표현 적으로 만들 수 있도록하는 것입니다 (예를 들어 데이터를 그룹화하는 "전통적인"코드는 그렇지 않습니다. 무엇을하려고하는지에 관해서는 매우 명확합니다. 코드의 대량에서 손실됩니다).
LINQ는 언어 통합 쿼리를 의미합니다. 이를 통해 C # 내에서 직접 "SQL 스타일"쿼리 언어를 사용하여 데이터 소스에서 정보를 추출 할 수 있습니다.
- 해당 데이터 소스는 SQL 서버 데이터베이스 일 수 있습니다. 이것은 Linq to SQL입니다.
- 해당 데이터 소스는 엔티티 프레임 워크 객체의 데이터 컨텍스트가 될 수 있습니다 . Linq에서 엔티티로 .
- 해당 데이터 소스는 ADO.net 데이터 세트 ( Linq to Dataset) 가 될 수 있습니다 .
이 데이터 소스는 XML 파일 ( Linq to XML) 일 수도 있습니다 .
또는 단순한 객체의 Collection 클래스 인 Linq to Objects .
LINQ는 쿼리 기술을 설명하고 나머지 이름은 쿼리되는 데이터의 소스를 설명합니다.
약간의 추가 배경 :
데이터 세트 는 데이터가 데이터베이스에서 .net 데이터 세트로로드되는 ADO.net 개체이며 Linq는로드 된 후 해당 데이터를 쿼리하는 데 사용할 수 있습니다.
함께 SQL에 Linq에 당신은 데이터베이스와 Linq에 - 투 - SQL에 대한지도는 SQL 서버 데이터베이스에서 데이터를로드을 담당하는 것이 .NET 클래스를 정의
And finally the Entity framework is a system where you can define a database and object mapping in XML, and can then use Linq to query the data that is loaded via this mapping.
'programing tip' 카테고리의 다른 글
PHP에서 클래스 이름을 어떻게 얻습니까? (0) | 2020.09.14 |
---|---|
대규모 SQL 스크립트 실행 (GO 명령 사용) (0) | 2020.09.14 |
왼쪽에서 오른쪽으로, 위에서 아래로 정렬 된 2D 배열에서 숫자를 어떻게 검색합니까? (0) | 2020.09.14 |
다음과 유사한 삼항 연산자? : (0) | 2020.09.14 |
데이터가 추가 될 때 div 끝으로 자동 스크롤하는 방법은 무엇입니까? (0) | 2020.09.14 |