2014-01-10 46 views
0

我有一个c#MVC应用程序通过/_vti_bin/ListData.svc服务参考访问SharePoint博客数据。我能够成功获取所有PostsItem以及所有CategoriesItems。但是,它们之间似乎没有任何关系。如果我获取所有帖子并遍历它们,则它们全部在Category属性中显示零个项目。通过WCF访问SharePoint博客文章时有空类别

我的假设是,有一个多对多的表,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); 

回答

0

这些类别最有可能被认为是SharePoint ListData服务中的“延迟”项。您将需要调用服务时加载延迟数据...

http://msdn.microsoft.com/en-us/library/ee358709%28v=vs.110%29.aspx

+0

快速,简单,完美的解决方案。谢谢! –

+0

这里是从我的代码被修改线: '变种帖= db.Posts.Expand( “分类”)OrderByDescending(p值=> p.Created);' 谢谢,@Jason。 –