在MVC3中显示具有左外部联接的SQL视图
我使用的是一个简单的视图,它是两个表上的一个左外部联接,用于获取每个费用所属的类别名称,并将它们分组以供显示。当我简单地运行视图并遍历项目时,它会重复这些项目,就像它不使用相同的视图一样在MVC3中显示具有左外部联接的SQL视图,sql,asp.net-mvc-3,Sql,Asp.net Mvc 3,我使用的是一个简单的视图,它是两个表上的一个左外部联接,用于获取每个费用所属的类别名称,并将它们分组以供显示。当我简单地运行视图并遍历项目时,它会重复这些项目,就像它不使用相同的视图一样 @foreach (var category in Model.FeeScheduleRates()) { <tr><td colspan="2">@category.Category</td></tr> foreach (var item
@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>
}
}
@foreach(Model.FeeScheduleRates()中的变量类别)
{
@类别,类别
foreach(Model.FeeScheduleRates()中的变量项)
{
@item.Fee_Title-@item.Description
@项目.金额
}
}
因此,我将第二组项目的方法改为while循环,但这会导致内存不足错误,并且似乎不起作用
@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>
}
}
@foreach(Model.FeeScheduleRates()中的变量类别)
{
@类别,类别
var cid=类别。类别ID;
while(category.Cat_ID==cid)
{
@category.Fee_Title-@category.Description
@类别.数额
}
}
所以问题是,如何迭代视图并将项目分组到它们的类别中,只显示一次类别>
我回到了绘图板,并使用了以下内容:
@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>
}
}
@foreach(Model.FeeScheduleRates().Distinct()中的变量类别)
{
@类别,类别
foreach(Model.FeeScheduleRates()中的变量项,其中(i=>i.Cat_ID==category.Cat_ID))
{
@item.Fee_Title-@item.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美元` 因此,DB中有12个项目属于自由类别,7个项目属于储蓄和货币市场帐户。它只是重复每个类别中的第一个项目,重复次数与类别中的记录相同。我确实明白了!!!在
while(category.Cat_ID==cid)中
不循环类别。Cat_ID
或cid
正在更改,因此循环永远不会结束
编辑
查看您得到的结果,您将遍历不同的类别,并多次显示该类别的第一项
如果lastcategory=thiscegory
,则需要遍历一个非独特的列表来获取所有信息,并隐藏类别名称
解决这个问题的一个好方法是为你想看到的内容写出纯html,然后反向构建它。为什么不将它们分组到eh SQLE中呢?也许这就是我应该关注的地方。当我尝试groupby
时,sql爆炸了。选择A.Cat\u ID,A.Fee\u Title作为Title,A.描述,A.金额,b.类别Fee_Schedule AS a LEFT OUTER JOIN Fee_Categories AS b ON a.Cat_ID=b.Cat_ID GROUP BY b.Category
所以也许我应该只对类别进行第二次查询?我想使用第一个Foreach循环对类别进行分组,但仅仅显示视图似乎比最初想象的要复杂。当然,在实体中使用连接框架也不是strightforward。您可以循环遍历按类别排序的所有数据,并拾取类别更改以显示类别标题,否则将单元格留空。这就是我对cid变量所做的。我甚至在while循环中重新分配了变量。我仍然不清楚为什么该项。类别不是iter当我们查看视图时,请仔细阅读。SQL视图:`SELECT a.Cat_ID,a.Fee_Title,a.Description,a.Amount,b.Category FROM dbo.Fee_Schedule as a.Cat_ID=b.Cat_ID ORDER BY a.Cat_ID`返回一个Cat_ID订单列表。请有人解释一下。