如何访问ICollection中的导航属性

时间:2011-08-24 08:47:46

标签: c# asp.net-mvc

我有一个名为BlogArticle的实体,它有一个名为

的属性
public virtual ICollection<BlogComment> BlogComments { get; set; }

我想做的是在我的视图中访问blogcomments的那些属性,但由于它在ICollection中,我无法通过它进行迭代。 (.count()确实有效。)

有关此事的任何建议吗?

欢呼声。

3 个答案:

答案 0 :(得分:2)

您可以使用foreach循环枚举集合。如果您需要随机访问集合的元素,可以使用ToList()扩展方法。这将创建一个包含集合所有元素的新列表。

foreach (var blogComment in blogArticle.BlogComments) {
   // Access sequentially from first to last.
}

var blogComments = blogArticle.BlogComments.ToList();
for (var i = 0; i < blogComments.Count; ++i) {
  var blogComment = blogComments[i]; // Access by index - can be done in any order.
}

答案 1 :(得分:0)

ICollection是一个接口,所以它取决于你如何初始化这个对象,即

ICollection<BlogComment> BlogComments = new List<BlogComment>();

允许你这样做......

BlogComments.Count;

答案 2 :(得分:0)

为了将来的参考,这个问题有点陈旧......我很惊讶以前没有人提到这个,但如果你不想在视图模型或视图本身中进行演员,你可以做:

@for(int i = 0; i < model.BlogComments.Count; i++)
{
    @Html.DisplayFor(model => model.BlogComments.ElementAt(i));
}

编辑:我将补充一点,这只是一个显示数据的有用策略(编辑示例以显示此内容),而不是在您希望在使用时将值发布回操作方法的表单内部的有用策略在HTML帮助程序中,如EditorFor。输入的name属性不是以允许模型绑定器将这些值绑定回集合的方式形成的。您可能需要手动编写名称(不健全),使用IList等索引操作符进行某种中间集合类型,以便与ICollection保持同步。