database - 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; }
}
有人能帮我吗?
解决方案
在您的控制器中,由于您的id属性和参数在字符串中,因此您应该使用字符串类的Equals(...)方法而不是使用==比较运算符,即
if (!string.IsNullOrEmpty(id))
{
test = (IOrderedQueryable<TestSet>)_context.TestDbSet.Where(x => x.Id.Equals(id, StringComparison.InvariantCultureIgnoreCase);
}
推荐阅读
- c++ - 在c ++中使用单例模式时如何编写cmake文件
- json - 如何获取键值对并使用 JMESPath 将它们转换为对象数组
- angular-material - 展开时将面板滚动到屏幕的大部分顶部
- angular - 我想将 mxgraph 与 angular 4 集成
- c++ - 为什么要防止名称修改 C 文件
- python - Rosalind 不接受“变量和一些算术”任务
- c# - TypeConverter 中的枚举值
- go - 如何在go中动态更改函数参数类型
- sql-server-2008 - 唯一索引违规
- react-native - 如何在 React Native 的 map 中使用 yield