您的位置:首页 > 产品设计 > UI/UE

MVC5 DBContext.Database.SqlQuery获取对象集合到ViewModel集合中(可以利用这个方法给作为前台视图页cshtml页面的@model 源)

2016-05-21 17:26 525 查看
首先我们已经有了一个Model类:

using System;
using System.Data.Entity;
using System.ComponentModel.DataAnnotations;

namespace MvcEntitiyFrameWork.Models
{
public class Movie
{
public int ID { get; set; }
public string Title { get; set; }

public int DirectorID { get; set; }

[Display(Name = "上映日期")]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy/MM/dd}", ApplyFormatInEditMode = true)]
public DateTime ReleaseDate { get; set; }

public decimal Price { get; set; }

public int GenreID { get; set; }
public virtual MovieGenre MovieGenre { get; set; }
public virtual Director Director { get; set; }
}

定义一个ViewModel类

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;

namespace MvcEntitiyFrameWork.ViewModels
{
public class MovieQuery
{
[DataType(DataType.Date)]
public DateTime? ReleaseDate { get; set; }
public int MovieCount { get; set; }
}

}

在Movie控制器中定义名为Query的Action:

public class MoviesController : Controller
{
private MovieDBContext db = new MovieDBContext();

public ActionResult Query()
{

//这里等同于LINQ查询,但是我习惯于用SQL语句来查询数据了(asp.net流派过来的)
List<MovieQuery> list = db.Database.SqlQuery<MovieQuery>("select ReleaseDate,count(1) as MovieCount from movies group by ReleaseDate").ToList();

return View(list);

}

}

在视图文件夹Movies下定义一个Query视图页:

@model IEnumerable<MvcEntitiyFrameWork.ViewModels.MovieQuery>

<!-- 此处使用的是ViewModels如果不加IEnumerable<>标签就会提示:不包含getenumerator的公共定义 的一个错误-->
@{
Layout = null;
}

<!DOCTYPE html>

<html>
<head>
<meta name="viewport" content="width=device-width" />
<title></title>
</head>
<body>
<div>
<form>
<table>
<tr>
<th>
Release Date
</th>
<th>
Movies count
</th>
</tr>
@foreach(var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.ReleaseDate)
</td>
<td>
@item.MovieCount
</td>
</tr>
}
</table>
</form>
</div>
</body>
</html>

最后运行项目,打开该视图页Query,可以看到数据成功绑定到视图页
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: