2016-07-26 1 views
0

SharePoint CSOM은이 코드 블록을 어떻게 처리합니까?SharePoint CSOM C# Where 절을 사용하여 쿼리로드 성능

FileCollection allDocs = libFolder.Files; 
clientContext.Load(allDocs, files => files.Where(file => file.Name == "test.docx"); 
clientContext.ExecuteQuery(); 

if (allDocs.Count > 0) 
{ 
    File currentDoc = allDocs[0]; 
    // continue 
} 

는 "allDocs"컬렉션을 완전히 열거 나 부하 매개 변수의 경우 절은 하나의 파일을 정확하게합니까?

또한 "allDocs [0]"색인 집합 선택없이 CSOM에서 파일 이름으로 파일을 검색하는 더 좋은 방법이 있어야합니다. 어떻게 할 수 있습니까?

답변

1

아래의 코드를 사용하는 경우는 하나의 파일을 정확하게해야합니다

FileCollection allDocs = libFolder.Files.Where(file => file.Name == "test.docx"); 
clientContext.LoadQuery(allDocs); // IQueryable 
clientContext.ExecuteQuery(); 
// it should query on server and return only requested items without enumerating 
// whole library 
// i think your code does the same, but im not sure here 
// i personally prefer using syntax above 
// note that im using LoadQuery, but not Load method 

// you can select a single item like this without awkward allDocs[0] syntax 
var singleDoc = allDocs.SingleOrDefault(); 
if (singleDoc != null) { 
    // do something 
} 

당신이 그것을 어떻게 할 것입니까?

아마도 CAML 쿼리.

0

마이크로 소프트 쉐어 포인트 서버 2010은 SharePoint 목록에 대한 엔티티에 LINQ 프레임 워크와 LINQ의 걸릴 장점 셰어 LINQ를 사용할 수 있습니다. LINQ 프레임 워크는 LINQ를 SharePoint 문을 CAML (공동 작업 응용 프로그램 마크 업 언어)으로 변환하고 은 SharePoint 개체 모델 또는 웹 서비스에 대해 CAML을 실행합니다. Source: MSDN

링크 된 페이지는 Linq에 - 투 - 셰어에 의해 생성 된 CAML을 볼 수 context.Log 속성에 텍스트 라이터를 추가 할 수있는 방법을 보여 계속된다.

코드에서 Linq는 IQueryable으로 바뀌어로드 함수로 전달되어 CAML로 변환됩니다. 그런 다음 executeQuery는 저장된 IQueryable 표현식을 모두 실행하고 allDocs와 같은 변수에 결과를 채 웁니다. 이것은 일반적인 Linq 지연 실행입니다.

.Where (...) 대신 .Single (...) 메서드를 사용하는 경우 Linq는 쿼리를 즉시 실행하고 IQueryable 대신 단일 항목을 반환합니다. 기대하고있다.

Alex K가 말한 것처럼 쿼리가 실행 된 후 .Single(), .SingleOrDefault(), .First(), .FirstOrDefault() 등의 표준 Linq 메서드를 사용하여 유일한 또는 첫 번째 항목을 검색합니다.

관련 문제