2013-03-12 90 views
0

假設我有下面的代碼行:動態指定lambda函數參數

context.Load(itemCollection, item => item.Include(i => i["Title"], i => i["Name"])); 

有沒有什麼辦法可以動態地指定參數的item.Include()函數,而不是硬編碼它們如上?

我會非常喜歡,讓用戶選擇他們想要檢索對象的屬性,例如TitleNameDescription

僅供參考,這裏是ClientContext.Load功能。這個功能是從Microsoft.SharePoint.Client.dll

public void Load<T>(T clientObject, params Expression<Func<T, object>>[] retrievals) where T : ClientObject 
{ 
    if ((object) clientObject == null) 
    throw new ArgumentNullException("clientObject"); 
    ClientAction.CheckActionParameterInContext(this, (object) clientObject); 
    DataRetrieval.Load<T>(clientObject, retrievals); 
} 
+0

是的,我總是爲MS CRM庫製作這樣的功能。你想研究'public void MyMethod (Func expression)其中t:'擴展表達式中你想要的類型。無論如何,在Func上搜索更多的例子 – 2013-03-13 00:53:45

回答

0

來看看在回答this question
我在創建動態where子句時遇到了類似的問題,這就是我如何解決它的。

2

我沒有必要的設置來測試它,但會像這樣工作?

String[] keys = ...; 
context.Load( itemCollection 
       , item => item 
         .Include(keys 
         .Select(key => { i => i[key] }) 
         .ToArray() 
      ); 
+0

不,我們不知道用戶想要檢索多少個鍵(屬性)。 – Moon 2013-03-13 00:49:51

+0

context.Load()和item.Include()函數的簽名是什麼? – bmm6o 2013-03-13 00:51:35

+0

用您所要求的信息更新了我的問題。 – Moon 2013-03-13 00:59:04

0

使用下列syntaxt(工作在JavaScript中,但在C#還沒有測試):

context.load(this.list, 'Include(Title, Name)'); 

'Include(Title, Name)'是一個字符串,是比較容易根據用戶輸入生成。

this.list指的是之前加載的共享點列表。