我们正在开发一个使用Linq to SharePoint的项目。该列表有几列。使用SPMetal创建类后,将其导入VS以访问数据上下文。 Linq查询工作正常。
通过删除列表列并使用包含站点列的内容类型,我们朝着不同的方向前进。 OOTB,添加/编辑表单工作正常。但是在使用SPMetal更新类并将类导入VS以获取数据上下文后,所有Linq查询都显示为错误。 Visual Studio无法再识别列,因为它们似乎不会出现在更新类的数据上下文中。列现在是内容类型,而不是列表。
有没有办法让内容类型的列在SPMetal的类文件中导出?是否有另一个库要导入以使用具有内容类型的列表将Linq写入SharePoint查询?你如何编写使用内容类型列的Linq查询?
答案 0 :(得分:0)
所以说你有一个名为Documents的列表。它有两列名为' One'和'两个'你使你的Linq to SP查询得很好:
DataContext dc = new DataContext("http://sharepoint");
var varResults = (from item in dc.Documents
where item.Two == "blah"
orderby item.One descending
select item);
然后,您决定要将内容类型与网站列一起使用。当您删除列时,上述查询会中断' One'和'两个'从列表中。您可以创建网站列并将其分配给名为' Master',parent为item的内容类型。 Master有两种内容类型,称为' CloneA'和克隆B'由于克隆内容类型的父级是Master,因此它们会自动获取它的网站列。将内容类型分配给列表时,定义如下:
Column - Content types
Title - Documents, Master, CloneA, CloneB
One - Master, CloneA, CloneB
Two - Master, CloneA, CloneB
克隆内容类型稍后将用于不同的信息策略以保留在“文档”列表中。在断开继承并在内容类型上设置保留策略之后,现在项目可以单独设置为将导致保留的内容类型(1天 - 克隆A,1周 - 克隆B)开始。
但是对于SP查询的linq仍然存在问题。即使站点列显示,SPMetal也仅出于某种原因捕获基本内容类型。所以对于linq来说,列与上面的查询并不存在。键入" where item。" ' Two'甚至不会出现。你必须施展才能使其发挥作用(可能没有正确解释)。所以这是工作代码:
DataContext dc = new DataContext("http://sharepoint");
var varResults = (from item in dc.Documents.OfType<Master>()
where item.Two == "blah"
orderby item.One descending
select item);
您可能很想使用
var varResults = (from item in dc.Documents.OfType<DocumentsMaster>()
不幸的是,这只会返回列表中与该内容类型相关联的项目。因此,如果您想要获取特定内容类型的项目进行过滤,请将自己解雇。