首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询数据库MVC 4

查询数据库MVC 4
EN

Stack Overflow用户
提问于 2012-07-20 12:34:52
回答 3查看 8.4K关注 0票数 0

我正在从样例应用程序MVC音乐商店学习MVC。它有两个数据库表,一个叫做'Order‘,另一个叫做'OrderDetails’。如果下了订单,并且客户选择了多个项目,则在结帐后,购买的每个项目都会在OrderDetails数据库中创建一个新行,并且OrderDetailsID将递增。

OrderDetail数据库如下所示:

代码语言:javascript
复制
http://imagebin.org/221494

我想写一个控制器,它将只传递具有相同特定OrderId的所有行。例如,在该数据库中有3行,每行都有相同的OrderId '3‘。

我如何做到这一点,并将其传递给剃刀视图?我试过了:

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MvcMusicStore.Models;

namespace Test.Controllers
{
public class OrderDetailsController : Controller
{
    private MusicStoreEntities db = new MusicStoreEntities();

          //
    // GET: /OrderDetails/Details/5

    public ActionResult Details(int id = 0)
    {
        OrderDetail orderdetail = db.OrderDetails.Find(id);
        if (orderdetail == null)
        {
            return HttpNotFound();
        }
        return View(orderdetail);
    }

这将返回一个基于OrderDetailsId的结果,而不是具有相同OrderId的多个结果。我应该能够访问...:11091/orderdetails/Details/3,看到的不是一个结果,而是三张不同专辑及其价格的列表。

有没有简单的方法可以做到这一点?谢谢你的建议。

EN

回答 3

Stack Overflow用户

发布于 2012-07-20 12:48:52

我猜您希望LINQ查询来做这件事。

原始答案(仅限 OrderItems)

以下内容应该足够了,但请注意,您需要将剃须刀视图模型类型从OrderDetail更改为IList<OrderDetail>

代码语言:javascript
复制
public ActionResult Details(int id = 0)
{
    var orderdetails = db.OrderDetails.Where(od => od.OrderId == id).ToList();
    if ((orderdetails == null) || (!orderdetails.Any()))
    {
        return HttpNotFound();
    }
    return View(orderdetails);
}

编辑

因为您现在将一个集合传递给视图,所以您需要遍历这些项来呈现它。也就是说,不是只获取OrderOrderDetails,而是获取Order.Include()所有相关的OrderDetails,然后将图形传递给视图,这实际上可能是有意义的。我假设您已经在实体框架中设置了OrderOrderDetails之间的关系。

控制器

代码语言:javascript
复制
public ActionResult Details(int id = 0)
{
    var orderWithDetails = db.Orders
                             .Include(o => o.OrderDetails)
                             .FirstOrDefault(o => o.OrderId == id);
    if (orderWithDetails == null)
    {
        return HttpNotFound();
    }
    return View(orderWithDetails);
}

视图(获取已预先加载OrderDetailsOrder )

代码语言:javascript
复制
@model MvcMusicStore.Models.Order

..。在此处显示订单级别字段

代码语言:javascript
复制
<div class="display-label">
   @Html.DisplayNameFor(model => model.Username)
</div>
<div class="display-field">
  @Html.DisplayFor(model => model.Username)
</div>

..。在此处显示OrderDetail级别字段,例如在表或网格中

代码语言:javascript
复制
@foreach (var orderItem in model.OrderDetails) {

  <div class="display-label">
       @Html.DisplayNameFor(orderItem => orderItem.OrderItemField1)
  </div>
  <div class="display-field">
      @Html.DisplayFor(orderItem => orderItem.OrderItemField1)
  </div>
}
票数 3
EN

Stack Overflow用户

发布于 2012-07-20 12:38:22

在SQL方面,这将是(我发明了字段名)

代码语言:javascript
复制
select orderdetails.title, orderdetails.quant
from orderdetails inner join orders
on orderdetails.ord = orders.ord
where orders.ordname = :p1

P1是一个接受订单名称/编号的参数

票数 0
EN

Stack Overflow用户

发布于 2013-02-15 20:00:44

公共ActionResult详细信息(int id = 0)

{ OrderDetail orderdetail = db.OrderDetails.Where(o => o.Id == id).ToList();if (orderdetail == null) { return HttpNotFound();}返回视图(Orderdetail);}

在你看来...

这取决于你的实体。您的视图将使用@model List

然后遍历列表:

@foreach(模型中的变量i){ Html.DisplayFor(x => i.Name) }

或者仅仅是YourProject.Model.xxx

@foreach(Model.YourList中的var i){ Html.DisplayFor(x => i.Name) }

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11572953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档