我有一个 c# MVC 应用程序,它通过/_vti_bin/ListData.svc 服务参考访问 SharePoint 博客数据。我能够成功获得所有帖子项目以及所有类别项目。但是,它们之间似乎没有关系。如果我获取所有帖子并循环浏览它们,则所有帖子在 Category 属性中都显示零项。
我的假设是,SharePoint 正在使用的多对多表无法通过 WCF 获得。我想知道是否有办法访问这些信息。这是我的代码。
public List<BlogData.PostsItem> GetPostsByCategory(string category)
{
List<BlogData.PostsItem> items = new List<BlogData.PostsItem>();
BlogData.CategoriesItem categoryItem = db.Categories.Where(c => c.Title == category).FirstOrDefault();
if (categoryItem != null)
{
var posts = db.Posts.ToList().OrderByDescending(p => p.Created);
foreach (var postsitem in posts)
{
Debug.Write(postsitem.Category.Count());
if (postsitem.Category.Contains(categoryItem))
{
items.Add(postsitem);
}
}
}
return items;
}
解决:
添加
db.LoadProperty(postsitem, "Category");
以前
if (postsitem.Category.Contains(categoryItem))
它就像一个魅力。谢谢,杰森。
编辑2:
显然,在进一步阅读后,考虑到我想检查一个类别的所有帖子,这不是最有效的方法。我使用的是 Expand,而不是 LoadProperty。
var posts = db.Posts.Expand("Category").OrderByDescending(p => p.Created);
这些类别很可能被视为 SharePoint ListData 服务中的"延迟"项。调用服务时,您将需要加载延迟的数据...
http://msdn.microsoft.com/en-us/library/ee358709%28v=vs.110%29.aspx