C# 试图在同一视图上显示来自同一模型的两个不同数据表

C# 试图在同一视图上显示来自同一模型的两个不同数据表,c#,asp.net-core,model-view-controller,C#,Asp.net Core,Model View Controller,我试图使用MVC将单个模型中的数据显示为同一视图页面中两个不同过滤的表 我可以让第一个表完美地工作,但第二个表会过滤第一个表中已经过滤过的数据 所以示例原始数据类似于 鲍勃,10岁,伦敦 比尔,12岁,巴黎 鲍勃,10岁,纽约 我想要一张桌子 比尔,12岁 鲍勃,10岁 还有一张单独的桌子 伦敦 巴黎 纽约 但我得到的是第二张桌子 伦敦 巴黎 第一个表的代码如下所示 <tbody> @foreach (var item in Model.Select(p

我试图使用MVC将单个模型中的数据显示为同一视图页面中两个不同过滤的表

我可以让第一个表完美地工作,但第二个表会过滤第一个表中已经过滤过的数据

所以示例原始数据类似于

鲍勃,10岁,伦敦 比尔,12岁,巴黎 鲍勃,10岁,纽约

我想要一张桌子

比尔,12岁 鲍勃,10岁

还有一张单独的桌子 伦敦 巴黎 纽约

但我得到的是第二张桌子 伦敦 巴黎

第一个表的代码如下所示

  <tbody>
            @foreach (var item in Model.Select(p => new { p.PlayerId, p.Position, p.Name, p.RankScore, p.CompsPlayed }).OrderBy(p=>p.Position).Distinct())
        {
            <tr>
                <td class="text-center">
                    @Html.DisplayFor(modelItem => item.Position)
                </td>
                <td>
                    <a asp-action="Index" asp-controller="PlayerResults" asp-route-playerid="@item.PlayerId"> @Html.DisplayFor(modelItem => item.Name)</a>
                </td>

                <td class="text-center">
                    @Html.DisplayFor(modelItem => item.PlayerId)
                </td>
                <td class="text-center">
                    @Html.DisplayFor(modelItem => item.RankScore)
                </td>
                <td class="text-center">
                    @Html.DisplayFor(modelItem => item.CompsPlayed)
                </td>

            </tr>
    }
        </tbody>
            @foreach (var item in Model.Select(c => new { c.Comp, c.CompID, c.Players, c.Old }).Where(o => o.Old == false).Distinct())
        {
            <tr>
                <td class="text-center">
                    <a asp-action="Index" asp-controller="CompResults" asp-route-id="@item.CompID"> @Html.DisplayFor(modelItem => item.Comp)</a>
                </td>

                <td class="text-center">
                    @Html.DisplayFor(modelItem => item.CompID)
                </td>
                <td class="text-center">
                    @Html.DisplayFor(modelItem => item.Players)
                </td>

            </tr>
    }
        </tbody>

@foreach(Model.Select(p=>new{p.PlayerId,p.Position,p.Name,p.RankScore,p.CompsPlayed})中的变量项)。OrderBy(p=>p.Position)。Distinct()
{
@DisplayFor(modelItem=>item.Position)
@DisplayFor(modelItem=>item.Name)
@DisplayFor(modelItem=>item.PlayerId)
@DisplayFor(modelItem=>item.RankScore)
@DisplayFor(modelItem=>item.CompsPayed)
}
第二张桌子是这样的

  <tbody>
            @foreach (var item in Model.Select(p => new { p.PlayerId, p.Position, p.Name, p.RankScore, p.CompsPlayed }).OrderBy(p=>p.Position).Distinct())
        {
            <tr>
                <td class="text-center">
                    @Html.DisplayFor(modelItem => item.Position)
                </td>
                <td>
                    <a asp-action="Index" asp-controller="PlayerResults" asp-route-playerid="@item.PlayerId"> @Html.DisplayFor(modelItem => item.Name)</a>
                </td>

                <td class="text-center">
                    @Html.DisplayFor(modelItem => item.PlayerId)
                </td>
                <td class="text-center">
                    @Html.DisplayFor(modelItem => item.RankScore)
                </td>
                <td class="text-center">
                    @Html.DisplayFor(modelItem => item.CompsPlayed)
                </td>

            </tr>
    }
        </tbody>
            @foreach (var item in Model.Select(c => new { c.Comp, c.CompID, c.Players, c.Old }).Where(o => o.Old == false).Distinct())
        {
            <tr>
                <td class="text-center">
                    <a asp-action="Index" asp-controller="CompResults" asp-route-id="@item.CompID"> @Html.DisplayFor(modelItem => item.Comp)</a>
                </td>

                <td class="text-center">
                    @Html.DisplayFor(modelItem => item.CompID)
                </td>
                <td class="text-center">
                    @Html.DisplayFor(modelItem => item.Players)
                </td>

            </tr>
    }
        </tbody>

@foreach(Model.Select中的变量项(c=>new{c.Comp,c.CompID,c.Players,c.Old})。其中(o=>o.Old==false)。Distinct()
{
@DisplayFor(modeleItem=>item.Comp)
@DisplayFor(modeleItem=>item.CompID)
@DisplayFor(modeleItem=>item.Players)
}
因此,我非常确定,与第一次过滤不同的是,第二次过滤仍然存在

有没有关于如何在两个表之间重置的建议

或者更好的获取数据的方法


我知道换个角度看会更好,但这不是老板想要的

  • 视图模型

  • 查看包

  • 查看数据

  • 温度数据

  • 会议

  • 动态的

  • 元组

  • 渲染动作

  • JSON

  • 导航属性


  • 这是一个简单的工作演示,您可以参考并修改代码:

    模型

    看法

    @model IEnumerable
    表1
    @DisplayNameFor(model=>model.FullName)
    @DisplayNameFor(model=>model.Age)
    @foreach(Model.OrderBy中的var项(p=>p.Position)。选择(p=>new{p.FullName,p.Age})。Distinct()
    {
    @DisplayFor(modelItem=>item.FullName)
    @DisplayFor(modelItem=>item.Age)
    }
    表2
    @DisplayNameFor(model=>model.Position)
    @foreach(Model.Select(p=>new{p.Position}).Distinct()中的变量项)
    {
    @DisplayFor(modelItem=>item.Position)
    }
    
    结果


    我要确保的第一件事是将第一个foreach全部注释掉,看看会发生什么。。。。其次,我将为每个foreach声明一个变量来保存Linq表达式的结果。类似于var query1=Model的东西。选择(p=…..,然后对第二个查询(如var query2=…)执行相同的操作,然后使用像foreach(query1中的var项)这样创建的变量执行foreach,这将使调试问题更容易。您还说“与第一个查询不同的是,第二个查询仍然存在”但是您对scond查询也有一个独特的调用您可以在模型上创建两个属性来保存数据表,然后分别引用视图中的数据表。