首页 > 解决方案 > Asp.net 核心数据库数据显示的频率高于现有数据

问题描述

我想知道为什么我的 ASP.NET Core MVC 项目将我的数据加倍。

它应该是什么:

应该

它给了我什么:

给我

看到不同?

我的控制器(控制器类-索引()-方法):

        [HttpGet()]
        public async Task<IActionResult> Index(string id)
        {
            IQueryable<string> werkeQuery = from m in _context.TestDbSet
                                            orderby m.Id
                                            select m.Id;

            var test = from t in _context.TestDbSet
                       orderby t.Id
                       select t;

            if (!string.IsNullOrEmpty(id))
            {
                test = (IOrderedQueryable<TestSet>)_context.TestDbSet.Where(x => x.Id == id);
            }

            var filter = new TestSet
            {
                Werke = new SelectList(await werkeQuery.Distinct().ToListAsync()),
                Liste = await test.ToListAsync()
            };

            return View(filter);
        }

我的模型类(可能有错误吗?):

`[Table("Test", Schema = "dbo")]
public class TestSet
{
    [Key]
    [Display(Name = "Werk")]
    [Column("Id")]
    public string Id { get; set; }

    [Display(Name = "Mitarbeiter ID")]
    [Column("M_ID")]
    public string M_Id { get; set; }

    [Column("Beginn")]
    [DataType(DataType.Date)]
    public DateTime Beginn { get; set; }

    [Column("Ende")]
    [DataType(DataType.Date)]
    public DateTime Ende { get; set; }


    [NotMapped]
    public SelectList Werke { get; set; }

    [NotMapped]
    public List<TestSet> Liste { get; set; }
}`

我的视图(相关代码:显示列表):

`@model DienstplanAnzeige.Models.TestSet

@{
    ViewData["Title"] = "Startseite";
}


<form asp-controller="Home" asp-action="Index" method="get">
    <div class="input-group mb-3">
        <select class="custom-select" asp-for="Id" asp-items="@Model.Werke">
            <option value="" disabled selected>Werk auswählen</option>
        </select>
        <input type="submit" value="Anzeigen" class="btn btn-outline-secondary" />
    </div>
</form>
<table class="table table-hover">
    <thead>
        <tr>
            <th>@Html.DisplayNameFor(model => model.Liste[0].Id)</th>
            <th>@Html.DisplayNameFor(model => model.Liste[0].M_Id)</th>
            <th>@Html.DisplayNameFor(model => model.Liste[0].Beginn)</th>
            <th>@Html.DisplayNameFor(model => model.Liste[0].Ende)</th>
        </tr>
    </thead>
    <tbody>
        @foreach(var item in Model.Liste)
        {
            <tr>
                <td>@Html.DisplayFor(modelItem => item.Id)</td>
                <td>@Html.DisplayFor(modelItem => item.M_Id)</td>
                <td>@Html.DisplayFor(modelItem => item.Beginn)</td>
                <td>@Html.DisplayFor(modelItem => item.Ende)</td>
            </tr>
        }
    </tbody>
</table>`

我的上下文类(名为“TestContext”):

public class TestContext : DbContext
{
    public TestContext(DbContextOptions<TestContext> options)
        : base(options)
    {
    }

    public DbSet<TestSet> TestDbSet { get; set; }
}

有人能帮我吗?

标签: databaselinqasp.net-coremodel-view-controller

解决方案


在您的控制器中,由于您的id属性和参数在字符串中,因此您应该使用字符串类的Equals(...)方法而不是使用==比较运算符,即

if (!string.IsNullOrEmpty(id))
{
     test = (IOrderedQueryable<TestSet>)_context.TestDbSet.Where(x => x.Id.Equals(id, StringComparison.InvariantCultureIgnoreCase);
}

推荐阅读