You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用LINQ批量设置SelectListItem的Selected属性为true

解决方案

你原来的代码存在两个关键问题:

  • 使用Where会过滤掉未选中的选项,但下拉列表通常需要保留所有可选项,仅标记匹配项为选中状态
  • 将ID列表直接ToString()后调用Contains是错误逻辑(得到的是集合类型的字符串表示,无法正确匹配选项ID)

正确的实现思路是:先提取需要选中的ID集合,再通过LINQ的Select方法遍历所有选项,为匹配项设置Selected属性,无需循环即可完成:

// 先缓存选中的ID集合,转成HashSet提升查询效率
var selectedIds = new HashSet<string>(
    _availabilityFormatMap.GetAvalabilityStorageFormat(id)
                          .Select(y => y.ID.ToString())
);

// 遍历所有选项,设置Selected属性
StorageFormats = (await _storageFormat.GetStorageFormatSelectList())
    .Select(item => new SelectListItem
    {
        Value = item.Value,
        Text = item.Text,
        Selected = selectedIds.Contains(item.Value)
    })
    .ToList();

如果你的ID是数值类型(如int),注意要和SelectListItem.Value的字符串类型保持一致,所以需要把ID转为字符串再存入集合。

如果追求极致紧凑,也可以把集合初始化嵌入LINQ中,但会多次调用GetAvalabilityStorageFormat(id),性能不如缓存集合的写法:

StorageFormats = (await _storageFormat.GetStorageFormatSelectList())
    .Select(item => new SelectListItem
    {
        Value = item.Value,
        Text = item.Text,
        Selected = _availabilityFormatMap.GetAvalabilityStorageFormat(id)
                                         .Select(y => y.ID.ToString())
                                         .Contains(item.Value)
    })
    .ToList();

内容的提问来源于stack exchange,提问作者beeeeeeeeeen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 03:59:59