我有以下代码:
SPSiteDataQuery query = new SPSiteDataQuery();
//Get List query string
query.Lists = "<Lists BaseType='1'></Lists>";
query.ViewFields = "<FieldRef Name='Title' Nullable='TRUE' />";
query.ViewFields += "<FieldRef Name='ContentTypeId' Nullable='TRUE' />";
query.ViewFields += "<FieldRef Name='ContentType' Nullable='TRUE' />";
query.ViewFields += "<FieldRef Name='ArticleStartDate' Nullable='TRUE' />";
query.ViewFields += "<FieldRef Name='Synopsis' Nullable='TRUE' />";
query.ViewFields += "<FieldRef Name='PublishingRollupImage' Nullable='TRUE' />";
query.ViewFields += "<FieldRef Name='Location' Nullable='TRUE' />";
query.ViewFields += "<FieldRef Name='LOBGroup' Nullable='TRUE' />";
query.Query = "<Where>" +
"<Contains>" +
"<FieldRef Name='ContentType'/>" +
"<Value Type='Text'>DCP_Article</Value>" +
"</Contains>" +
"</Where>";
query.Query += "<OrderBy>" +
"<FieldRef Name='ArticleStartDate' Descending='TRUE' />" +
"</OrderBy>";
query.RowLimit = Convert.ToUInt32(loadsize);
query.Webs = "<Webs Scope='Recursive' />";
//Get Site Data from web
DataTable dt = web.GetSiteData(query);
在我的搜索结果中,我想获得该项目来自的子网站,我知道如果我使用query.ViewFields += "<FieldRef Name='FileRef' Nullable='TRUE' />";
我可以获得该项目的完整网址,但无论如何我可以获得该网站它来自哪里?这样的事情:
query.ViewFields += "<FieldRef Name='SiteName' Nullable='TRUE' />";
答案 0 :(得分:3)
尝试:
query.ViewFields += "<ProjectProperty Name=\"Title\" />";
有关详细信息,请参阅SPSiteDataQuery.ViewFields:
可以使用ProjectProperty标记包含网站属性。 ProjectProperty标记的Name属性标识特定属性,可能包含以下值之一:
标题 - 包含该项目的网站的标题。
WebId - 包含该项目的网站的GUID。
答案 1 :(得分:1)
您可以依赖EncodedAbsUrl和FileRef来检索网络。第一个将包含项目的整个路径,第二个将包含部分部分(如果我记得很清楚)。因此,执行子字符串应该为您提供托管项目的Web路径。
对不起,我没有在我面前使用我的虚拟机,但如果您使用SharePoint Explorer / Manager等工具查看,您将看到所有隐藏的列表项字段,您将能够获取一个最接近你的解决方案(但我最依赖EncodedAbsUrl和FileRef是最可靠的)
答案 2 :(得分:0)
另一种选择是使用WebId列,它将包含在结果集中。 这是一个guid,您可以使用它来打开网络,结果来自:
Guid webGuid = new Guid(row["WebId"].ToString());
using(SPWeb web = SPContext.Current.Site.AllWebs[webGuid])
{
//Do some thing with the SPWeb
}