LINQ,ASP.net mvc和加入

时间:2009-08-16 12:48:22

标签: asp.net-mvc linq

我正在申请使用MVC和LINQ。

我有一个名为home的控制器执行此操作:

    Dim notes = From x In dal.tbl_notes _
                Join y In dal.tbl_note_users On y.user_id Equals x.note_id _
                Select x.note, x.datestamp, y.is_owner, y.note_user_id
    ViewData("notes") = notes
    Return View()

还有一个名为home的页面,其中包含用于显示输出的代码:

<%  For Each note In ViewData("notes")%>
    <%=Html.Encode(note.ToString)%>
<% next %>

但是,输出如下所示:

{note = vbnv,datestamp =,is_owner = True,note_user_id = 1}

如何输出单个列(如note或datestamp)?有没有更好的方法呢?

我尝试过使用viewdata.model,但数据来自两个不同的表,所以我不能说它是什么类型。

由于

1 个答案:

答案 0 :(得分:3)

创建一个ViewModel类,其中包含注释文本,日期,布尔值isOwner和用户ID。

Public Class NoteViewModel
     public Note as String
     public DateStamp as DateTime
     public IsOwner as Boolean
     public NoteUserID as Integer
End Class

使用联接中的值选择此项。

Dim notes = From x In dal.tbl_notes _
            Join y In dal.tbl_note_users On y.user_id Equals x.note_id _
            Select new NoteViewModel With { .Note = x.note, _
                                            .DateStamp = x.datestamp, _
                                            .Is Owner = y.is_owner, _
                                            .NoteUserId = y.note_user_id _
                                          }
Return View(notes)

然后使用NoteViewModel强烈输入您的视图。这将允许您引用Model.Note等。

<%  For Each note In Model %>
    <%= Html.Encode(note.Note) %>
    <%= note.DateStamp.ToString("M/d/yyyy") %>
    <%= IIF( note.IsOwner, "yes" , "no") %>
    <input type='hidden' value='<%= note.NoteUserId %>' />
<% next %>