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

如何使用C# Lambda拆分字符串并查询指定员工ID的薪资ID

用C# Lambda表达式快速获取指定员工ID的薪资ID

当然可以!相比手动遍历数组的方式,用C#的LINQ结合Lambda表达式能更优雅、简洁地完成这个需求,还能兼顾代码的健壮性。下面给你两种常用的实现方式:

方式一:单次查询的简洁实现

如果只是偶尔查询一次员工ID,直接链式调用LINQ方法就能搞定,不需要额外存储映射关系:

string mystring = "0:12211,90:33221,23:09011";
int targetEmployeeId = 23;

// 通过Lambda + LINQ直接查询
var salaryId = mystring.Split(',')
    .Select(item => item.Split(':'))
    // 过滤格式合法且匹配目标员工ID的条目
    .Where(parts => parts.Length == 2 && int.TryParse(parts[0], out int empId) && empId == targetEmployeeId)
    .Select(parts => parts[1])
    // 取第一个匹配结果,没找到则返回null
    .FirstOrDefault();

if (salaryId != null)
{
    Console.WriteLine($"员工ID {targetEmployeeId} 对应的薪资ID是:{salaryId}");
}
else
{
    Console.WriteLine($"未找到员工ID {targetEmployeeId} 的薪资信息");
}

这段代码的逻辑很清晰:

  1. 先用Split(',')把原始字符串拆分成单个员工的薪资条目
  2. 再用Select把每个条目拆分成员工ID和薪资ID的数组
  3. 通过Where过滤掉格式错误(比如没有冒号、员工ID不是数字)的条目,只保留匹配目标ID的项
  4. 最后提取薪资ID,用FirstOrDefault确保没找到时返回null,避免抛出异常

方式二:预存映射,适合多次查询

如果需要频繁查询不同员工的薪资ID,建议先把字符串转换成Dictionary<int, string>,这样后续查询的效率会更高(O(1)时间复杂度):

string mystring = "0:12211,90:33221,23:09011";

// 提前构建员工ID到薪资ID的映射字典
var employeeSalaryMap = mystring.Split(',')
    .Select(item => item.Split(':'))
    .Where(parts => parts.Length == 2 && int.TryParse(parts[0], out _))
    .ToDictionary(parts => int.Parse(parts[0]), parts => parts[1]);

// 查询指定员工ID
int targetEmployeeId = 23;
if (employeeSalaryMap.TryGetValue(targetEmployeeId, out string foundSalaryId))
{
    Console.WriteLine($"员工ID {targetEmployeeId} 对应的薪资ID是:{foundSalaryId}");
}
else
{
    Console.WriteLine($"未找到员工ID {targetEmployeeId} 的薪资信息");
}

这种方式的优势在于,映射只需要构建一次,后续不管查询多少次都能快速获取结果,非常适合需要多次查询的场景。

额外提示

上面的代码都加入了格式校验逻辑(比如检查parts.Length == 2、用int.TryParse验证员工ID),能避免原始字符串格式不规范时出现异常,让程序更稳定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:55:58