C# 是否可以将Include与字段名的字符串值一起使用?
我想使用CSOM加载SharePoint Project Server项目C# 是否可以将Include与字段名的字符串值一起使用?,c#,lambda,csom,C#,Lambda,Csom,我想使用CSOM加载SharePoint Project Server项目 var proj = ctx.LoadQuery(ctx.Projects .Where(p => p.Id == projGuid) .Include(p => p.Id, p => p.Name)); ctx.ExecuteQuery(); 我需要Include()是动态的,所以我这样做了: Expression<Func<PublishedTask
var proj = ctx.LoadQuery(ctx.Projects
.Where(p => p.Id == projGuid)
.Include(p => p.Id, p => p.Name));
ctx.ExecuteQuery();
Include()
是动态的,所以我这样做了:
Expression<Func<PublishedTask, object>>[] funcArray
= new Expression<Func<PublishedTask, object>>[2];
funcArray[0] = p => p.Name;
funcArray[1] = p => p.Id;
var proj = ctx.LoadQuery(ctx.Projects
.Where(p => p.Id == projGuid)
.Include(funcArray));
ctx.ExecuteQuery();
这是行不通的,我也不确定我是否做得对,或者是否有可能做到这一点。您可以传递逗号分隔的字符串,然后使用一些Linq拆分它们,并在查询中包含每个函数,而不是传递一个函数数组:
var includeFields = "Name,Id";
var proj = ctx.Projects.GetByGuid(projGuid);
foreach (var fieldName in includeFields.Split(','))
{
ctx.Load(proj, includes => includes[fieldName]);
}
ctx.ExecuteQuery();
您还可以使用方法“GetByGuid”而不是Linq,其中有一个接受字符串的
Include
重载。如果已经将属性名作为字符串,则可以使用该属性。对于您的代码,我在第3行中得到错误…q.Include(p).
p:无法从'string'转换为'System.Linq.Expressions.Expression'我是否需要包含一些内容才能使用Include()中的重载?
?它只显示了将包含与数组一起使用的选项。您使用的是哪个版本的实体框架?Core还是6?尝试在文档中添加:“使用System.Linq.Expressions;”我不知道。我在VisualStudio中查看了项目属性,找到的关于框架的唯一信息是:应用程序>目标框架:.NETFramework 4.5。这就是你的意思吗?我应该把它改成4.6吗?我已经在使用“using System.Linq.Expressions;”@socramm再次更新。我相信它现在会起作用。
var includeFields = "Name,Id";
var proj = ctx.Projects.GetByGuid(projGuid);
foreach (var fieldName in includeFields.Split(','))
{
ctx.Load(proj, includes => includes[fieldName]);
}
ctx.ExecuteQuery();