动态指定lambda函数参数

时间:2013-03-12 23:57:14

标签: c# .net c#-4.0 .net-4.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);
}

3 个答案:

答案 0 :(得分:2)

我没有必要的设置来测试它,但是会有这样的工作吗?

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

答案 1 :(得分:0)

查看this question的答案 我在创建动态where子句时遇到了类似的问题,这就是我如何解决它。

答案 2 :(得分:0)

使用以下语法合成(在JavaScript中有效,但未在C#中测试过):

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

'Include(Title, Name)'是一个字符串,根据用户输入更容易生成。

this.list 指的是之前加载的共享点列表。