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

C# 中如何使用LINQ移除字符串末尾的指定字符

现有实现正确性判断

你的代码不符合「仅移除字符串末尾点号」的需求:

  • Trim('.')会同时移除字符串首尾两端所有连续的点号,例如原始值为.demo.site.时,处理后的结果是demo.site,开头的点号也会被误删,和你的预期不符。
  • 如果你使用EF/EF Core等ORM框架操作数据库,还要注意Trim('.')能否被正确翻译成对应数据库的SQL函数,若翻译失败会触发客户端求值,数据量大时会出现明显的性能损耗。

更优实现方案

方案1:LINQ to Objects 内存查询场景

如果你是操作内存中的集合,直接使用TrimEnd('.')即可,该方法只会移除末尾所有连续的点号,不会修改字符串开头和中间的内容:

var hatoList = (from L in db.vHatoList select L.HatoFullName.TrimEnd('.')).ToList();

如果你的需求是仅移除末尾单个点号,不是所有连续的末尾点号,可以使用以下逻辑:

var hatoList = db.vHatoList.Select(L => 
    L.HatoFullName.EndsWith('.') 
        ? L.HatoFullName[..^1] 
        : L.HatoFullName
).ToList();

上述语法使用了C# 8.0及以上版本支持的范围运算符,低版本可以替换为Substring(0, L.HatoFullName.Length - 1)。

方案2:ORM 数据库查询场景

主流EF Core 3.0+版本已经支持TrimEnd函数对SqlServer、MySQL、PostgreSQL等数据库的SQL翻译,可以直接使用方案1的写法。
如果你使用的ORM版本不支持TrimEnd翻译,小数据量场景下可以先拉取原始字段到内存再处理:

var hatoList = db.vHatoList.Select(L => L.HatoFullName)
    .AsEnumerable()
    .Select(s => s.TrimEnd('.'))
    .ToList();

如果数据量较大,建议直接在查询中使用数据库原生函数实现,例如SQL Server中可以用RIGHT函数判断末尾字符后截取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 06:30:04