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

如何用LINQ获取首字母在A-E区间的供应商实体列表?

使用LINQ获取首字母A-E的供应商列表

当然可以用LINQ实现,而且能写出简洁优雅还更高效的代码,替代你原来的循环判断逻辑。下面是几种可行的方案:

方案1:直接判断首字母范围(推荐,数据库端过滤)

如果你的_context.Vendors是EF的DbSet,直接在IQueryable上用Where过滤,条件会转换成SQL在数据库端执行,避免把所有数据加载到内存:

var sortedVendors = _context.Vendors
    .Where(v => 
        !string.IsNullOrEmpty(v.Name) 
        && char.ToUpperInvariant(v.Name[0]) >= 'A' 
        && char.ToUpperInvariant(v.Name[0]) <= 'E')
    .ToList();
  • 先判断Name不为空/空字符串,避免索引越界
  • char.ToUpperInvariant确保大小写不敏感(比如小写a-e也能匹配)

如果用C# 9.0及以上版本,还可以用模式匹配简化条件:

var sortedVendors = _context.Vendors
    .Where(v => 
        !string.IsNullOrEmpty(v.Name) 
        && char.ToUpperInvariant(v.Name[0]) is >= 'A' and <= 'E')
    .ToList();

方案2:用字符集合匹配

如果需要更灵活的首字母范围(比如后续要调整允许的字母),可以用HashSet存储允许的字符:

var allowedFirstLetters = new HashSet<char> { 'A', 'B', 'C', 'D', 'E', 'a', 'b', 'c', 'd', 'e' };
var sortedVendors = _context.Vendors
    .Where(v => v.Name != null && allowedFirstLetters.Contains(v.Name[0]))
    .ToList();

为什么比原来的写法好?

  1. 代码更简洁,逻辑一目了然
  2. 避免冗余的||判断和手动循环
  3. 直接在数据库端过滤(EF场景下),性能远优于先加载所有数据再在内存筛选

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 06:45:32