所以这是交易,我有一个表审计,这个表包含列“状态”,它指定审计当前状态。现在我正在创建一个搜索此表的视图,其中一个字段将是我想从数据库中获取的状态,并将其显示在下拉列表中供用户选择。
这是我在Controller中创建SelectList的方法:
ViewBag.Audit_Status = new SelectList(db.Audits, "Audit_Status", "Audit_Status");
当我在视图中创建下拉列表时:
@Html.DropDownList("Audit_Status", null, htmlAttributes: new { @class = "form-control" })
问题在于我将状态重复,因为很明显有多个审核具有相同的状态。我怎样才能显示不同的状态?
答案 0 :(得分:1)
在LINQ中使用 distinct :
ViewBag.Audit_Status = new SelectList(db.Audits.Select(m => m.Audit_Status).Distinct(), "Audit_Status", "Audit_Status");
对于可选文字:
@Html.DropDownList("Audit_Status", null, "Please specify the Status", htmlAttributes: new { @class = "form-control" })
答案 1 :(得分:1)
感谢@Sandip和@codelahiru
使用Linq查询distinct,因为两者都有注释
ViewBag.Audit_Status = new SelectList(db.Audits.Select (x => x.Audit_Status).Distinct());
但是,当您从一列中选择数据时,您无法指定数据值字段和数据文本字段,如果这样做,视图将引发异常。
答案 2 :(得分:0)
我认为db.Audits
是您的状态列表,然后使用linq
这样的命令,
ViewBag.Audit_Status = new SelectList(db.Audits.Distinct(), "Audit_Status", "Audit_Status");
或者如果Audits
内部有任何属性,例如Status
,请使用你的linq,'
ViewBag.Audit_Status = new SelectList(db.Audits.Select(x=>x.Status).Distinct().ToList(), "Audit_Status", "Audit_Status");
答案 3 :(得分:0)
希望这能解决您的问题。
ViewBag.Audit_Status == db.Audits.Select(x => x.Audit_Status)
.Distinct()
.Select(x =>
new SelectList
{
Text = x,
Value = x
}).ToList();
或者如果您将在代码中使用linq。然后您可以安装MoreLinq nuget.DistinctBy是MoreLinq中非常有用的扩展之一。
ViewBag.Audit_Status == db.Audits.DistinctBy(x => x.Audit_Status)
.Select(x =>
new SelectList
{
Text = x.Audit_Status,
Value = x.Audit_Status//you can give any value
}).ToList();