ASP.NET 通过 LINQ 查询的核心 MVC 组

ASP.NET Core MVC Group by query with LINQ

我正在尝试从我的 table 之一查询国家/地区列并尝试将它们分组,以便一个国家/地区名称只出现一次。

控制器代码是

ViewBag.Countries = (from pT in _context.InfoProducts
                                 group pT by new { pT.Country } into g
                                 select new
                                 {
                                     Country = g.Key.Country
                                 }).ToList();

在我看来,我正试图在这样的下拉菜单中显示这个国家/地区列表

<div class=" form-group">
    @Html.Label("Country")
    <div class="col-md-12 ">
    @Html.DropDownList("Country", new SelectList(ViewBag.Countries, "Country"), "Select Country", new { @class = "col-form-label col-md-12 label-align" })
    </div>
</div>

我面临的问题是,虽然它返回了预期的国家名称,但结果生成的是键值对,类似于

{Country = USA}
{Country = Canada}

下面给出了从检查元素复制生成的 HTML

<select class="col-form-label col-md-12 label-align" id="Country" name="Country">
    <option value="">Select Country</option>
    <option>{ Country = USA}</option>
    <option>{ Country = Canada}</option>
</select>

我怎样才能在下拉列表中只得到国家名称而不是我目前得到的结果。

而不是使用 group by,听起来 distinct 更合适:

_context.InfoProducts.Select(x => x.Country).Distinct().ToList();

这会返回一个要使用的字符串列表,不会给您带来当前遇到的 key-value 对问题。

还有一件事,当您使用 new SelectList(ViewBag.Countries, "Country") 时,SelectList 的构造函数的重载将尝试将 Country 的值设置为 selected 项,但这在您的列表中不存在,因此 Select Country 将始终显示为 selected。如果你想 select 一个实际的国家,那么它必须看起来像:

new SelectList(ViewBag.Countries, "Canada")

从当前产品的数据中获取 Canada 的位置。