将特定值放在数据库的特定表格单元格中。 (剃刀 - HTML)

时间:2017-04-20 09:16:26

标签: c# html sql razor

<table class="prTable">
    <tr>
        <th>Exercise</th>
        <th>1</th>
        <th>2</th>
        <th>3</th>
        <th>4</th>
        <th>5</th>
        <th>6</th>
        <th>7</th>
        <th>8</th>
        <th>9</th>
        <th>10</th>
        <th>11</th>
        <th>12</th>
    </tr>

    @for (var i = 1; i <= 3; i++)
    {
        <tr class="prTableRow">
        @if (i == 1)
        {
            <td class="prExerVariNameTD">Squat</td>
        }
        else if (i == 2)
        {
            <td class="prExerVariNameTD">Benchpress</td>
        }
        else
        {
            <td class="prExerVariNameTD">Deadlift</td>
        }
        @for (var ii = 1; ii <= 12; ii++)
        {
            var getPR = "SELECT top 1 kg, rep, date FROM Test WHERE exerVariName LIKE '%Comp%' AND exercise = @0 AND rep = @1 order by kg desc";
            db.Execute(getPR, i, ii);

            foreach (var get in db.Query(getPR, i, ii))
            {
                DateTime Date = get.Date;
                var finalDate = Date.ToString("MMM d, yyyy");
                var weight = get.kg + "kg";
                var reps = "x " + get.rep;

                <td class="prTableCell" title="@finalDate">@weight @reps</td>
            }
        }
        </tr>

    }
</table>

所以,在我的数据库中,我有一堆数据,基于训练,每行都有一个exerise名称,多个可以有相同的,所有行也有重量数据和重复的数量。这样做的是它检查每个运动名称并选择在该运动名称上进行1次重复的最高权重,然后选择2,依次为12,这样它将显示我为每个运动名称的每次重复所做的最佳结果在表格布局中,如下图所示

enter image description here

然而,对于所有练习而言,每次重复的数据总是不是数据库,因此有些数字没有显示,如图所示,深蹲行为1,2,3,5,6, 10,12,所以有一些缺失了,我希望每个数字都在表头中的每个对应的数字下,所以5将位于5以下,依此类推,我想解决这个问题的方法是放在没有数据的单元格中0kg,例如在深蹲行上,没有数字4的数据,我想在那里放置0kg,这将把5个向前推进一个单元格,它最终会在5号下面,所有人都等等,所以他们都在正确的地方。

因此,对于数据库中不存在的所有重复数字,我想将其设为0.这是否有意义?

编辑: 数据库图片

enter image description here

1 个答案:

答案 0 :(得分:1)

var getPR = "SELECT kg, rep, date FROM Test WHERE exerVariName LIKE '%Comp%' AND exercise = @0 order by kg desc";
db.Execute(getPR, i);
var data = db.Query(getPR, i)

@for (var ii = 1; ii <= 12; ii++)
{
    var matched = data.SingleOrDefault(x => x.rep == ii);
    if (matched != null)
    {
        DateTime Date = get.Date;
        var finalDate = Date.ToString("MMM d, yyyy");
        var weight = matched.kg + "kg";
        var reps = "x " + matched.rep;

        <td class="prTableCell" title="@finalDate">@weight @reps</td>
    }
    else
    {
        <td class="prTableCell">0kg</td>
    }
}

您可以只执行一次sql查询,并根据练习类型获取所有记录。你不需要每次都要重复查询,这样会更有效率。

在循环中使用Linq查找记录,其中有1个代表。如果没有此类记录,il将返回null,您将知道您需要空td。如果找到记录,则使用其数据填充td

编辑:更多,你可以像这样只查询一次数据库

var getPR = "SELECT kg, rep, date, exercise FROM Test WHERE exerVariName LIKE '%Comp%' order by kg desc";

并将Linq更改为此

var matched = data.SingleOrDefault(x => x.exercise == i && x.rep == ii);