2017-12-15 34 views
0

날짜 범위 내에서 결과를 제한하려고했습니다. CSOM을 사용하여 SharePoint에 연결 중입니다. 제가 생각하는 SharePoint 버전은 SharePoint Online입니다 (우리는 사무실 365를 가지고 있습니다).Linq 쿼리에 대한 필드 값 가져 오기 - SharePoint

기본적으로 아래 쿼리에서 반환되는 날짜를 제한하고 싶습니다. 내가 원한다면 Start_Date < = 오늘End_Date> = 오늘. 그 이상 나는 linq을 사용하여 필드의 값을 반환하는 방법을 잘 이해하지 못하고있다. 제대로 작동하는

.Where(x => x.Id <= 50)

:

나는이 추가되었습니다. 이것은 Intellisense와 함께 Id 속성을 찾을 수 있기 때문에 쉽습니다. 그러나 관심있는 필드를 추출하는 방법을 찾을 수 없으며, linq를 사용하여 추가 Where로 내 결과를 제한하는 방법을 찾을 수 없습니다.

지금 나는 그대로 내 코드를 실행하려고 다음과 같은 오류가 발생합니다 :

The 'ToDateTime' member cannot be used in the expression.

관련 코드 :

private ListItemCollection GetSharePointList(string XML, string tableName, ClientContext context, byte limit = 50) 
    { 
     List testTable = context.Web.Lists.GetByTitle(tableName); 

     CamlQuery camlQuery = new CamlQuery 
     { 
      ViewXml = XML //The Passed in XML is: "<view></view>" 
     }; 

     ListItemCollection GetSharePointList = testTable.GetItems(camlQuery); 
     DateTime today = DateTime.Today; 

     context.Load(GetSharePointList, 
     items => items.Take(limit).Include(
       item => item.Id, 
       item => item["DayOfMonth"], 
       item => item["Start_Date"], 
       item => item["End_Date"], 
       item => item["Task_FrequencyID_x003a_Frequency"], 
       item => item["TaskID_x003a_TaskName"], 
       item => item["TaskID_x003a_TaskAlias"], 
       item => item["TaskID_x003a_TaskDueTime"], 
       item => item["Daily_Frequency_x003a_DayofWeek"], 
       item => item["Weekly_Frequency_x003a_Week"], 
       item => item["End_Date"], 
       item => item["Monthly_Frequency"]) 
         .Where(x => x.Id <= 50) 
         .Where(y => Convert.ToDateTime(y.FieldValues["Start_Date"]) <= today)); 

     context.ExecuteQuery(); 
     return GetSharePointList; 
    } 
+0

ALL 기타 사항 서보 -OFF (X => x.Field ("START_DATE")) – jdweng

+0

같은 뭔가해야 @ 고마워. "ListItem에 'Field'...에 대한 정의가 없습니다. –

+0

필드는 오타가 될 수있는 개체입니다. 따라서 유형을 모른 채 대답을 드릴 수는 없습니다. 항목은 이미 DateTime 일 수 있으므로 변환 할 필요가 없습니다. – jdweng

답변

1

은 = 오늘 START_DATE < 사이의 결과를 제한하고, the End_Date> = 오늘, 당신은 CAML 쿼리를 사용해야합니다. 그것이 SharePoint에서 작동하는 방식입니다.

그래서, 당신은 다음과 같이 코드를 수정해야합니다

List testTable = context.Web.Lists.GetByTitle(tableName); 

var viewQuery = string.Format(@"<View> 
    <Query> 
     <Where> 
     <And>   
     <Leq> 
      <FieldRef Name='Start_Date' /> 
      <Value Type='DateTime'><Today /></Value> 
     </Leq> 
     <Geq> 
      <FieldRef Name='End_Date' /> 
      <Value Type='DateTime'><Today /></Value> 
     </Geq> 
     </And> 
    </Where> 
    </Query> 
</View>"); 

CamlQuery camlQuery = new CamlQuery 
{ 
    ViewXml = viewQuery; 
}; 

ListItemCollection GetSharePointList = testTable.GetItems(camlQuery); 

context.Load(GetSharePointList, 
    items => items.Include(
    item => item.Id, 
    item => item["DayOfMonth"], 
    item => item["Start_Date"], 
    item => item["End_Date"], 
    item => item["Task_FrequencyID_x003a_Frequency"], 
    item => item["TaskID_x003a_TaskName"], 
    item => item["TaskID_x003a_TaskAlias"], 
    item => item["TaskID_x003a_TaskDueTime"], 
    item => item["Daily_Frequency_x003a_DayofWeek"], 
    item => item["Weekly_Frequency_x003a_Week"], 
    item => item["End_Date"], 
    item => item["Monthly_Frequency"])); 
context.ExecuteQuery(); 

foreach(ListItem spListItem in GetSharePointList){ 
    //do something with the data 
} 

참조 - Retrieve list items using CSOM C#

+0

감사합니다 Gautam. 가능한 경우 Linq를 사용하여 목록을 제한하는 것이 좋습니다. CAML 쿼리를 통해서만이 작업을 수행 할 수 있다고 말하고 있습니까? –

+0

예, 결과를 제한하려면 CAML 쿼리 만 사용해야합니다. –

+0

CAML로만 제한 할 수있는 경우'.Where (x => x.Id <= 50)'가 이러한 레코드를 제한하는 이유는 무엇입니까? –