属性降低了一级

时间:2013-01-22 18:40:55

标签: c# linq entity-framework lambda

我对查询的访问数据或设置问题没有太多问题,因此我可以将其传递给视图。

这是表达式

  var distinctReplies = pd.Project.ProjectDoc
        .SelectMany(i => i.Comment
            .SelectMany(k => k.CommentReply
                .Select(u => u.User)
            ).Distinct()
        ).Select(g => new {FirstName = g.FirstName, LastName = g.LastName, UserID = g.UserID})
        .ToList();

在这个表达式之后我想用另一个从同一个用户模型获取值的结果,我想将distinctReplies分配给一个ViewBag变量,然后能够通过它循环并执行此操作     foreach (var user in @ViewBag.distinctReplies)在剃须刀视图中。

然而,要实际获得我必须做的值distinctReplies.Select(i => i.FirstName)。不知道如何处理这个。

2 个答案:

答案 0 :(得分:1)

使用此:

@foreach (var reply in (IEnumerable)ViewBag.distinctReplies) 
{
}

您无法枚举dynamic的实例。将其转换为IEnumerable以获取允许的语句。

有关详细说明,请参阅this question

答案 1 :(得分:1)

我建议创建一些ViewModel对象来填充查询结果。能够访问@foreach循环内的属性。

<强>模型

public class UserVM
{
    public int UserID{get; set;}
    public string FirstName {get; set;}
    public string LastName {get; set;}  
}

更新了查询

  var distinctReplies = ....
                .Select(g => new UserVM {FirstName = g.FirstName, 
                                         LastName = g.LastName, 
                                         UserID = g.UserID}).ToList();

然后,在视图中,您需要将强制转换添加到IEnumerable<UserVM>

查看

@foreach (var user in (IEnumerable<UserVM>) ViewBag.distinctReplies)