在MVC3中使用Left Outer Join显示SQL视图

时间:2012-11-05 14:46:22

标签: sql asp.net-mvc-3

我正在使用一个简单的视图,它是两个表上的左外连接,以获取每个FEE所属的CATEGORY名称并将它们分组以供显示。当我只是运行视图并遍历项目时,它会重复项目,就像它没有使用相同的视图一样。

    @foreach (var category in Model.FeeScheduleRates())
{
    <tr><td colspan="2">@category.Category</td></tr>
    foreach (var item in Model.FeeScheduleRates())
    {                                  

    <tr> 
        <td>@item.Fee_Title - @item.Description</td>
        <td>@item.Amount</td>                                        
    </tr>
    }                                   
}

所以我将我的方法改为第二组项目的while循环,但这带来了OUT OF MEMORY错误并且似乎不起作用。

@foreach (var category in Model.FeeScheduleRates())
{   
    <tr><td colspan="2">@category.Category</td></tr>
    var cid = category.Cat_ID;                             
    while (category.Cat_ID == cid)
    {
         <tr> 
            <td>@category.Fee_Title - @category.Description</td>
            <td>@category.Amount</td>                                        
        </tr>       
    }                            
}

所以问题是,如何遍历视图并将项目分组到其类别中,仅显示一次类别&gt;

我已经回到绘图板并使用它:

                             @foreach (var category in Model.FeeScheduleRates().Distinct())
                            {
                                <tr><td colspan="2">@category.Category</td></tr>
                                foreach (var item in Model.FeeScheduleRates().Where(i=>i.Cat_ID == category.Cat_ID))
                                {                               
                                    <tr> 
                                        <td>@item.Fee_Title - @item.Description</td>
                                        <td>@item.Amount</td>                                        
                                    </tr>
                                }                                   
                            }

经历过某种形式的成功,因为类别显示为行,然后是下面的项目。有趣的是,它仍然只是重复相同的项目,因为它们是匹配该类别的记录。我仍然很好奇为什么它没有正确地迭代这些项目并给我每个Fee_Title和Description。 例如:

`免费服务

银行对银行(B2B)转账 - 资金转入FCU免费 银行对银行(B2B)转账 - 资金转入FCU免费 银行对银行(B2B)转账 - 资金转入FCU免费 银行对银行(B2B)转账 - 资金转入FCU免费 银行对银行(B2B)转账 - 资金转入FCU免费 银行对银行(B2B)转账 - 资金转入FCU免费 银行对银行(B2B)转账 - 资金转入FCU免费 银行对银行(B2B)转账 - 资金转入FCU免费 银行对银行(B2B)转账 - 资金转入FCU免费 银行对银行(B2B)转账 - 资金转入FCU免费 银行对银行(B2B)转账 - 资金转入FCU免费 银行对银行(B2B)转账 - 资金转入FCU免费 银行对银行(B2B)转账 - 资金转入FCU免费 储蓄和货币市场账户
储蓄自动转移 - $ 2
储蓄自动转移 - $ 2
储蓄自动转移 - $ 2
储蓄自动转移 - $ 2
储蓄自动转移 - $ 2
储蓄自动转移 - $ 2
储蓄自动转账 - $ 2`

因此,在免费类别下的数据库中有12个项目,在储蓄和货币市场帐户下有7个项目。它只是重复每个类别中的第一个,与该类别中的记录一样多次。我明白了!

1 个答案:

答案 0 :(得分:1)

while (category.Cat_ID == cid)循环中,category.Cat_IDcid都没有变化,因此循环永远不会结束。

修改

查看您获得的结果正在迭代不同的类别并多次显示该类别的第一个项目。

您需要遍历非不同的列表以获取所有信息,并在lastcategory = thiscategory时隐藏类别名称。

解决这个问题的一个好方法是写出你想要看到的纯html 然后向后工作来构建它。