다음을 통해 공유


Table Service에 대한 LINQ 쿼리 작성

LINQ 구문을 사용하여 테이블 서비스에 대해 쿼리를 작성할 수 있습니다. 다음 예제에서는 테이블 및 엔터티 쿼리에 표시된 샘플 쿼리와 유사하지만 REST 프로토콜 대신 LINQ를 사용하는 샘플 쿼리를 작성하는 방법을 보여 줍니다.

Table service는 엔터티의 모든 속성을 검색하는 간단한 쿼리 실행을 지원합니다. 엔터티 속성의 하위 집합을 선택할 수도 있습니다. Table service에서는 또한 Where 연산자를 사용한 쿼리 결과 필터링 및 Take 연산자를 사용해서 반환할 엔터티 수 지정이 지원됩니다.

Table Service에서 지원되는 LINQ 연산자에 대한 자세한 내용은 Table Service에 대해 지원되는 쿼리 연산자를 참조하세요.

엔터티 속성 프로젝션

LINQ select 절을 사용해서 엔터티에서 속성 하위 집합을 프로젝션할 수 있습니다. 프로젝션 가능한 최대 속성 수는 항목에 포함될 수 있는 최대 속성 수이기도 한 255개입니다.

엔터티의 속성을 프로젝팅하려면 클라이언트가 다음과 같이 또는 MaxDataServiceVersion 헤더를 지정하여 DataServiceVersion 표시되는 OData Data Service 버전 3.0을 지원해야 합니다.

DataServiceVersion: 3.0;NetFx  
MaxDataServiceVersion: 3.0;NetFx  

다음 예에서는 필요한 개체 이니셜라이저를 사용해서 단일 엔터티로부터 속성을 프로젝션하는 방법을 보여줍니다.

var query = from entity in dataServiceContext.CreateQuery<SampleEntity>(tableName)  
                 where entity.PartitionKey == "MyPartitionKey"  
                 select new { entity.RowKey };  

다음 예에서는 10개 속성이 포함된 엔터티에서 3개의 속성을 프로젝션합니다. 이 예에서 SampleEntity의 10개 속성은 A부터 J까지의 문자입니다.

IEnumerable<SampleEntity> query = from entity in  
                                       dataServiceContext.CreateQuery<SampleEntity>(tableName)  
                                       where entity.PartitionKey == "MyPartitionKey"  
                                       select new SampleEntity  
                                      {  
                                          PartitionKey = entity.PartitionKey,  
                                          RowKey = entity.RowKey,  
                                          A = entity.A,  
                                          D = entity.D,  
                                          I = entity.I  
                                      };  

표준 REST 요청에서 $select 쿼리 옵션을 사용하여 엔터티 속성을 프로젝션할 수도 있습니다. 자세한 내용은 쿼리 엔터티를 참조하세요.

엔터티 프로젝션 및 변환에 대한 자세한 내용은 OData 설명서의 시스템 쿼리 옵션 선택($select) 을 참조하세요.

상위 n개 엔터티 반환

n개의 엔터티를 반환하기 위해 LINQ Take 연산자를 사용합니다. 단일 쿼리로 반환할 수 있는 최대 엔터티 수는 1,000입니다. Take 연산자에 대해 1,000개가 넘는 값을 지정하면 오류 코드 400(잘못된 요청)이 나타납니다.

다음 예에서는 Customers 테이블에서 상위 10개 엔터티를 반환합니다.

var query = (from entity in context.CreateQuery<Customer>("Top10Customers")  
                 select entity).Take(10);  

문자열 속성 필터링

다음 예에서는 두 개의 문자열 속성에 대해 필터링합니다.

var query = from entity in context.CreateQuery<Customer>("SpecificCustomer")  
                 where entity.LastName.Equals("Smith")  
                 && entity.FirstName.Equals("John")  
                 select entity;  

다음 예에서는 비교 연산자를 사용한 접두사 일치를 수행해서 문자 'A'로 시작하는 LastName 속성이 포함된 엔터티를 반환합니다.

var query = from entity in context.CreateQuery<Customer>("CustomersA")  
                 where entity.LastName.CompareTo("A") >= 0  
                 && entity.LastName.CompareTo("B") < 0  
                 select entity;  

숫자 속성 필터링

다음 예에서는 값이 30보다 큰 Age 속성이 포함된 모든 엔터티를 반환합니다.

var query = from entity in context.CreateQuery<Customer>("CustomersOver30")  
                 where entity.Age > 30  
                 select entity;  

이 예에서는 해당 값이 100.25보다 작거나 같은 AmountDue 속성이 포함된 모든 엔터티를 반환합니다.

var query = from entity in context.CreateQuery<Customer>("CustomersAmountDue")  
                 where entity.AmountDue <= 100.25  
                 select entity;  

부울 속성 필터링

다음 예에서는 IsActive 속성이 true로 설정된 모든 엔터티를 반환합니다.

var query = from entity in context.CreateQuery<Customer>("ActiveCustomers")  
                 where entity.IsActive == true  
                 select entity;  

DateTime 속성 필터링

다음 예에서는 CustomerSince 속성이 2008년 7월 10일과 동일한 엔터티를 반환합니다.

DateTime dt = new DateTime(2008, 7, 10);  
var query = from entity in context.CreateQuery<Customer>("CustomerSince")  
                 where entity.CustomerSince.Equals(dt)  
                 select entity;  

참고 항목

테이블 및 엔터티 쿼리
테이블 서비스에 지원되는 쿼리 연산자