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

如何在C#的linqToDb查询中匹配首个空格前的子串?

解决方案

要实现匹配res.Value中首个空格之前的部分,你可以借助LinqToDb提供的SQL原生函数组合完成,具体代码和说明如下:

修改后的查询代码

var instruments = (from res in _db.Instrument.Instruments.WithNoLock()
                   // 找到第一个空格的位置,找不到返回0
                   let spacePosition = Sql.CharIndex(" ", res.Value)
                   // 截取空格前的部分:有空格就取到空格前,没空格就取整个字符串
                   let valuePrefix = spacePosition > 0 
                       ? Sql.Substring(res.Value, 1, spacePosition - 1)  // LinqToDb的Substring是1起始索引,和SQL一致
                       : res.Value
                   // 保持原有的Like匹配逻辑,若需完全相等可改为 valuePrefix == ticker
                   where Sql.Like(ticker, valuePrefix)
                   select new
                   {
                       // 此处填充你的字段定义
                   });

关键细节说明

  • Sql.CharIndex:对应SQL的CHARINDEX函数,用于定位第一个空格的位置,字符串中无空格时返回0
  • Sql.Substring:注意LinqToDb的该方法采用1-based索引(和SQL原生函数一致),因此截取长度为空格位置减1
  • 如果你的需求是ticker与前缀完全匹配,替换Sql.Like为直接相等判断(valuePrefix == ticker)性能更优

边界情况处理

如果res.Value可能为空或null,可添加空值判断避免异常:

let valuePrefix = !string.IsNullOrEmpty(res.Value) && spacePosition > 0
    ? Sql.Substring(res.Value, 1, spacePosition - 1)
    : res.Value ?? string.Empty

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 02:15:02