Lambda表达式用于获取表中的两列但是如何使用viewbag在我的视图中访问它

时间:2015-07-09 17:19:51

标签: c# asp.net-mvc

我使用lambda表达式来获取表中的两列但是如何使用viewbag在我的视图中访问它,如果我们使用lambda表达式从表中获取两列,那将是什么类型。

例如:

GatesEntities Gates = new GatesEntities();
ViewBag.Index = Gates.Concepts.OrderBy(s => s.concept_id).Select(s => new { s.Concept_Name,s.Session_Id });
return View(); 

我有5个会话,在每个会话中我都有一些概念。现在我需要使用viewbag为我的视图中的每个会话获取概念名称。

请帮助我,我浪费了很多时间在这上面..

3 个答案:

答案 0 :(得分:0)

Viewbag.Index是一个IEnumerable(因为Gates.Concepts.OrderBy(s => s.concept_id).Select(s => new { s.Concept_Name,s.Session_Id })返回一个集合),所以在视图上迭代它。

 @foreach(Concept i in (IEnumerable<Concept>)Viewbag.Index){
       <p>@i.Concept_Name</p>
       <p>@i.Session_Id</p>
    }

答案 1 :(得分:0)

GatesEntities Gates = new GatesEntities();
ViewBag.Index = Gates.Concepts.OrderBy(s => s.concept_id).ToList();
return View(); 

查看代码

@foreach(var c in (List<Concepts>)ViewBag.Index)
{
    @c.Concept_Name
}

答案 2 :(得分:0)

new { ... }的语法意味着您正在创建被称为&#34;匿名对象&#34;的内容。这些类型为object,并要求您在&#34;动态&#34;内部引用属性,也就是说在运行时。

因此,真的错误的想法是将它用于视图之类的东西,在那里你只是开始运行时编译。至少在控制器动作之类的东西中,你会得到一些编译时错误检查,但在视图中,这只是一个等待爆炸的定时炸弹。

课程很便宜,如果你要做这样的事情,那么建立一个容纳价值的课程就好了,那么你就会在整个过程中强力打字。这意味着更少的错误,因为Visual Studio会正确地向你尖叫,因为如果你犯了错误,你就会编写代码和编译错误。例如(在这里猜测你的类型):

public class ConceptViewModel
{
    public string Concept_Name { get; set; }
    public Guid Session_Id { get; set; }
}

然后:

var model = Gates.Concepts.OrderBy(s => s.concept_id).Select(s => new ConceptViewModel {
    Concept_Name = s.Concept_Name,
    Session_Id = s.Session_Id
});

return View(model);

最后在你看来:

 @model IEnumerable<ConceptViewModel>

 // whatever