C# 如何在下拉列表MVC 5中显示不同的列值

C# 如何在下拉列表MVC 5中显示不同的列值,c#,asp.net-mvc,C#,Asp.net Mvc,这里是交易,我有一个审计表,这个表包含列“Status”,它指定了审计的当前状态。现在我正在创建一个视图来搜索这个表,其中一个字段是我想从数据库中获取的状态,并将其显示在下拉列表中,供用户选择 以下是我在控制器中创建SelectList的方式: ViewBag.Audit_Status = new SelectList(db.Audits, "Audit_Status", "Audit_Status"); 当我在视图中创建下拉列表时: @

这里是交易,我有一个审计表,这个表包含列“Status”,它指定了审计的当前状态。现在我正在创建一个视图来搜索这个表,其中一个字段是我想从数据库中获取的状态,并将其显示在下拉列表中,供用户选择

以下是我在控制器中创建SelectList的方式:

            ViewBag.Audit_Status = new SelectList(db.Audits, "Audit_Status", "Audit_Status");
当我在视图中创建下拉列表时:

                @Html.DropDownList("Audit_Status", null, htmlAttributes: new { @class = "form-control" })

问题是我得到了重复的状态,因为显然有多个审核具有相同的状态。如何仅显示不同的状态?

我假设
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");

我假设
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");

在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" })

在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" })

感谢@Sandip和@codelahiru

使用Linq查询distinct,因为两者都有注释

ViewBag.Audit_Status = new SelectList(db.Audits.Select (x => x.Audit_Status).Distinct());

但是,当您仅从一列中选择数据时,不能指定数据值字段和数据文本字段,如果这样做,视图将引发异常

感谢@Sandip和@codelahiru

使用Linq查询distinct,因为两者都有注释

ViewBag.Audit_Status = new SelectList(db.Audits.Select (x => x.Audit_Status).Distinct());

但是,当您仅从一列中选择数据时,不能指定数据值字段和数据文本字段,如果这样做,视图将引发异常

希望这能解决您的问题

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();

希望这能解决你的问题

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();


我正在寻找一个解决方案,而不是:1-为状态创建一个单独的表2-创建一个硬编码状态IEnumerable并在SelectList中使用它在此上下文中什么是
db
?使用LINQ对数据上下文中的列执行distinct操作,如
db.Audits.Select(x=>x.status).distinct()。然后,您需要在DDL helper参数上附加SelectList以添加选项项。@TetsuyaYamamoto我不明白您所说的DDL helperDDL helper意味着SelectList intelisense用数据构建SelectList是什么意思,displaytext和Value我正在寻找一个解决方案,而不是:1-为状态创建一个单独的表2-创建硬编码状态IEnumerable并在SelectList中使用它在这个上下文中什么是
db
?使用LINQ对数据上下文中的列执行distinct操作,如
db.Audits.Select(x=>x.status).distinct()。然后,您需要在DDL helper参数上附加SelectList以添加选项项。@TetsuyaYamamoto我不明白DDL helper的意思是什么?DDL helper的意思是SelectList IntelliSense要构建包含数据、显示文本和值的SelectList有人降级了我的答案,请就此提供评论,因为可能有些东西我也能学到..有人降级了我的答案,请提供一个评论,因为可能有些东西我也能学到..它不起作用,不断抛出此错误数据绑定:“System.String”不包含名为“Audit\u Status”的属性。您已经给出了您提到的代码“审计状况“column,请替换您检索并希望显示的列。这不是问题,我已经发布了错误,感谢您的帮助。但我有另一个快速的问题,现在当我将数据发送到SelectList时,是否有可能用户看到的第一个选定值不是来自数据库的值,比如“请指定状态”有一个选项值属性可以在那里指定“请指定状态”我不明白你的意思“选项值的一个属性”它不起作用,继续抛出此错误数据绑定:“System.String”不包含名为“Audit\u Status”的属性。您在代码中提到了“Audit\u Status”“column,请替换您检索并希望显示的列。这不是问题,我已经发布了错误,感谢您的帮助。但我有另一个快速的问题,现在当我将数据发送到SelectList时,是否有可能用户看到的第一个选定值不是来自数据库的值,比如“请指定状态”有一个选项值属性可以在那里指定“请指定状态”我不明白你的意思“期权价值的一个属性”