0

在我们的 MVC4 应用程序中,我的数据库有一个 Orders 表、一个 Products 表和一个 Category 表。每个订单在外键关系中都有一个产品(加上数量),并且该产品属于具有外键的类别。

所以 Order 有一个 OrderId、ProductId(FK 到 Product)、一个数据加上一个数量,而 Product 有一个 ProductId、Name 和一个 CategoryId(FK 到 Category),Category 有一个 CategoryId 和一个 Name。

现在我们制作了一个“购物清单”,其中显示了白天订购的类别,并在类别名称下方显示了产品。

为了只显示该日期的产品,我们使用下面的 foreach 循环:

@model Tuple<List<myproject.Models.Order>, List<myproject.Models.Order>>
@foreach (var item1 in Model.Item1)
    {
        if (item1.Date.ToString("d").Equals(DateTime.UtcNow.Date.ToString("d")))
        {
            <tr>    
                <td>
                    <h3>@Html.DisplayFor(catName => item1.Product.Category.Name)</h3>
                </td>
            </tr>
        }

        foreach (var item2 in Model.Item2)
        {
            if (item2.Product.Category.Name.Equals(item1.Product.Category.Name) &&
                 item2.Date.ToString("d").Equals(DateTime.UtcNow.Date.ToString("d")))
            {

                <tr>
                    <td>

                            @Html.DisplayFor(productName => item2.Product.Name)
                            &nbsp(x @Html.DisplayFor(quantity => item2.Quantity))

                    </td>
                </tr>

            }
        }
    }

要显示类别和类别中的产品,它会错过列表中类别的名字。输出是:

Apple   (x 1)  
Banana  (x 1)  

Snacks
Fries   (x 3)  
Hamburger(x 1)  

Veggies
Tomato   (x 1)  

代替

Fruit 
Apple   (x 1)  
Banana  (x 1)  

Snacks
Fries   (x 3)  
Hamburger(x 1)  

Veggies
Tomato   (x 1)  

在过去的一个小时里,我一直在为此烦恼。有人可以解释为什么它不显示“水果”的条目吗?

4

2 回答 2

1

我的猜测是这是一个夏令时问题 - 您可能会发现您的 UTC 日期已被调整,因此当表示为 UTC 时日期会发生变化。例如,在英国,如果我在01/04/2013 23:00:00当地时间创建了一条记录,则以 UTC 时间表示,02/04/2013 00:00:00因为我们在这段时间(+1 小时)观察 DST。

为了避免这些类型的问题,您应该将 UTC 转换回本地时间并使用DateTime.Now.Date.

于 2013-11-11T12:58:23.987 回答
1

你已经用if-block 包围了它。从这个问题为什么会在这里或者你试图用它来完成什么问题并不清楚。您尝试过滤类别的方式或存储相关数据的方式很可能存在逻辑缺陷。无论如何,如果您删除它,您应该会看到您所期望的类别名称。

@foreach (var item1 in Model.Item1)
{
    <tr>    
        <td>
            <h3>@Html.DisplayFor(catName => item1.Product.Category.Name)</h3>
        </td>
    </tr>

    foreach (var item2 in Model.Item2)
    {
        ...
    }
}
于 2013-11-11T12:55:52.860 回答