LINQ를 사용하여 쿼리 구성
게시 날짜: 2017년 1월
적용 대상: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online
Microsoft Dynamics 365(온라인 및 온-프레미스)의 .NET LINQ(Language-Integrated Query) 쿼리 공급자는 표준 LINQ 구문을 사용합니다. LINQ 쿼리를 만드는 첫 번째 단계는 관련 엔터티 유형과 엔터티 유형 간 관계를 식별하는 것입니다. 그런 다음 데이터 원본과 다른 쿼리 매개 변수를 지정할 수 있습니다.
from 절은 단일 "루트" 엔터티를 반환하는 데 사용됩니다. 쿼리 공급자는 단일 엔터티 유형의 엔터티만 반환할 수 있습니다.orderby 및 select 절은 이 루트 엔터티를 참조해야 합니다.join 절을 사용하여 관계가 있는 엔터티를 "루트" 엔터티에 추가할 수 있습니다.
이 항목의 내용
LINQ 연산자
LINQ 제한
다중 엔터티 필터
LINQ 연산자
모든 LINQ 쿼리 식에는 비슷한 형식이 있습니다. 다음 표에는 Microsoft Dynamics 365 LINQ 쿼리 공급자를 사용할 때 LINQ 쿼리 식에서 가장 많이 사용되는 절을 보여 줍니다.
LINQ 연산자 |
설명 |
예제 |
---|---|---|
데이터 원본 가져오기(from 절) |
생성된 서비스 컨텍스트와 초기 바인딩을 사용할 경우 생성된 컨텍스트에 AccountSet와 같이 IQueryable 엔터티 집합을 사용합니다. 생성된 컨텍스트를 사용하지 않을 경우 조직 서비스 컨텍스트 개체의 CreateQuery 메서드는 Microsoft Dynamics 365 엔터티에 대한 액세스를 제공합니다. |
생성된 서비스 컨텍스트 사용:
CreateQuery 메서드 사용:
|
join 절 |
join 절은 내부 조인을 나타냅니다. 절을 사용하여 공통 특성 값에 조인할 수 있는 두 개 이상의 엔터티를 사용합니다. |
|
필터링(where 절) |
where 절은 주로 부울 식을 사용하여 결과에 필터를 적용합니다. 필터는 원본 시퀀스에서 제외할 요소를 지정합니다. 각 where 절에는 단일 엔터티 유형에 대한 조건만 포함할 수 있습니다. 여러 엔터티와 관련된 복합 조건이 잘못되었습니다. 대신 각 엔터티는 별도의 where 절로 필터링해야 합니다. |
|
orderby |
orderby 연산자는 지정된 순서로 반환된 쿼리 특성을 배치합니다. |
|
select 절 |
select 절은 반환되는 데이터의 양식을 정의합니다. 절은 쿼리 식의 결과에 따라 열 집합을 만듭니다. 작업할 새 개체의 인스턴스도 정의할 수 있습니다.select 절을 사용하여 새로 만든 개체는 서버에서 만들어지지 않지만 로컬 인스턴스입니다. |
|
LINQ 제한
LINQ 쿼리 공급자는 LINQ 연산자의 하위 집합을 지원합니다. LINQ에서 표현할 수 있는 모든 조건이 지원되는 것은 아닙니다. 다음 표는 기본 LINQ 연산자의 제한 사항 중 일부를 보여 줍니다.
LINQ 연산자 |
제한 사항 |
---|---|
join |
외부 조인을 나타냅니다. 왼쪽 외부 조인만 사용할 수 있습니다. |
from |
쿼리 당 from 절 한 개를 지원합니다. |
where |
절의 왼쪽은 특성 이름이고 절의 오른쪽은 값이어야 합니다. 왼쪽을 상수로 설정할 수 없습니다. 절의 양쪽 모두 상수가 될 수는 없습니다. String은 Contains, StartsWith, EndsWith 및 Equals가 작동하도록 지원합니다. |
groupBy |
지원 안 됨. FetchXML은 LINQ 쿼리 공급자와 함께 사용할 수 없는 그룹화 옵션을 지원합니다.추가 정보: FetchXML 집계 사용 |
orderBy |
Contact.FullName과 같은 엔터티 특성으로 정렬할 수 있습니다. |
select |
익명의 유형, 생성자 및 이니셜라이저를 지원합니다. |
last |
last 연산자는 지원되지 않습니다. |
skip 및 take |
서버 쪽 페이징을 사용하는 skip 및 take를 지원합니다.skip 값은 take 값보다 크거나 같아야 합니다. |
aggregate |
지원 안 됨. FetchXML은 LINQ 쿼리 공급자와 함께 사용할 수 없는 집계 옵션을 지원합니다.추가 정보: FetchXML 집계 사용 |
다중 엔터티 필터
Microsoft Dynamics 365 및 Microsoft Dynamics 365(온라인)에서 복잡한 .NET LINQ(Language-Integrated Query) 쿼리를 만들 수 있습니다. filter 절이 있는 Join 절을 여러 개 사용하여 여러 엔터티에서 특성에 대해 필터링되는 결과를 만듭니다.
다음 샘플은 두 엔터티를 사용하고 각 엔터티의 값에 따라 결과를 필터링하는 LINQ 쿼리를 만드는 방법을 보여 줍니다.
using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
var query_where3 = from c in svcContext.ContactSet
join a in svcContext.AccountSet
on c.ContactId equals a.PrimaryContactId.Id
where a.Name.Contains("Contoso")
where c.LastName.Contains("Smith")
select new
{
account_name = a.Name,
contact_name = c.LastName
};
foreach (var c in query_where3)
{
System.Console.WriteLine("acct: " +
c.account_name +
"\t\t\t" +
"contact: " +
c.contact_name);
}
}
Using svcContext As New ServiceContext(_serviceProxy)
Dim query_where3 = From c In svcContext.ContactSet _
Join a In svcContext.AccountSet _
On c.ContactId Equals a.account_primary_contact.Id _
Where a.Name.Contains("Contoso") _
Where c.LastName.Contains("Smith") _
Select New With {Key .account_name = a.Name,
Key .contact_name = c.LastName}
For Each c In query_where3
Console.WriteLine("acct: " & c.account_name & vbTab & vbTab _
& vbTab & "contact: " & c.contact_name)
Next c
End Using
참고 항목
샘플: LINQ 쿼리 만들기
샘플: 복합 LINQ 쿼리
LINQ(.NET 언어 통합 쿼리)를 사용하여 쿼리 작성
LINQ 쿼리에 런타임에 바인딩 엔터티 클래스 사용
블로그: CodePlex에서 Dynamics CRM REST/Web API용 LINQPad 4 드라이버 사용 가능
Microsoft Dynamics 365
© 2017 Microsoft. All rights reserved. 저작권 정보