gpt4 book ai didi

c# - 使 DropDownList 与众不同

转载 作者:太空宇宙 更新时间:2023-11-03 21:12:37 25 4
gpt4 key购买 nike

数据库表:

|ID|      |Athlete|        |Sport|
1 Jacoby Ellsbury Baseball
2 Dustin Pedroia Baseball
3 Kobe Bryant Basketball
4 Lebron James Basketball
5 Patrick Kane Hockey
6 Sidney Crosby Hockey

我想在我的创建操作中创建一个仅包含 Sport 属性的下拉列表

我尝试过的:

ViewBag.Sport = new SelectList(db.AthleteTable.Distinct(), "ID", "Sport");

或者:

ViewBag.Sport = new SelectList(db.AthleteTable, "ID", "Sport").Distinct();

CSHTML:

<div class="form-group">
@Html.LabelFor(model => model.Sport, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownList("Sport", null, "-- Select Sport --", htmlAttributes: new { @class = "form-control" } )
@Html.ValidationMessageFor(model => model.Sport, "", new { @class = "text-danger" })
</div>
</div>

这呈现了我的下拉列表,但值是这样重复的:

Baseball
Baseball
Basketball
Basketball
Hockey
Hockey

我想要的:

Baseball
Basketball
Hockey

感谢任何帮助。

更新:

我的表格是这样的原因是因为我可以创建其他下拉列表并将每个运动员按运动分开:

List<SelectListItem> lstAthletes = new List<SelectListItem>();

using(var context = new ConnectionString())
{
List<AthleteTable> lstAthletes = context.AthleteTable.ToList();
var groups = lstAthletes.GroupBy(x => x.Sport);
foreach(var group in groups)
{
var slg = new SelectListGroup() { Name = group.Key };

foreach(AthleteTable athlete in group)
{
SelectListItem item = new SelectListItem() { Text = athlete.Athlete, Value = athlete.ID.ToString(), Group = slg };
lstAthletes.Add(item);
}
}

}

最佳答案

你可以使用GroupBy:

var distinctSports = db.AthleteTable.GroupBy(a => a.Sport).Select(g => g.First());
ViewBag.Sport = new SelectList(distinctSports, "ID", "Sport");

但是,奇怪的是,您从运动员表中选择运动并将运动员 ID 映射到完全不相关的运动名称,因为它是运动员 ID 而不是运动 ID。

通常你应该在你的运动员表中有一个Sport-table 和一个指向它的外键。然后您可以从中进行选择,所有运动项目都是独一无二的。

关于c# - 使 DropDownList 与众不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36649943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com