如何在C#中将逗号分隔的字符串格式化为指定过滤条件语句
C# 实现指定字符串格式转换的可行方法
方法1:基础循环拼接
适用于拆分后元素数量不固定的场景,除最后一个元素外都用MyId字段,最后一个用Id字段:
// 原字符串 string input = "111,222,333"; // 按逗号拆分 string[] idSegments = input.Split(','); List<string> filterItems = new List<string>(); for (int i = 0; i < idSegments.Length; i++) { // 单引号转义,避免特殊字符导致语法错误 string safeId = idSegments[i].Replace("'", "''"); if (i < idSegments.Length - 1) { filterItems.Add($"MyId eq '{safeId}'"); } else { filterItems.Add($"Id eq '{safeId}'"); } } // 用or拼接所有条件 string output = string.Join(" or ", filterItems);
方法2:LINQ 简洁写法
逻辑和方法1一致,代码更精简:
string input = "111,222,333"; string[] idSegments = input.Split(','); string output = string.Join(" or ", idSegments.Select((id, index) => { string safeId = id.Replace("'", "''"); return index == idSegments.Length - 1 ? $"Id eq '{safeId}'" : $"MyId eq '{safeId}'"; }));
方法3:固定3段元素的硬编码写法
如果确认原字符串拆分后永远只有3个元素,可以直接按索引取值拼接,性能最高:
string input = "111,222,333"; string[] idSegments = input.Split(','); // 记得做单引号转义 string output = $"MyId eq '{idSegments[0].Replace("'", "''")}' or MyId eq '{idSegments[1].Replace("'", "''")}' or Id eq '{idSegments[2].Replace("'", "''")}'";
注意:如果生成的字符串用于OData查询、SQL拼接等场景,必须做好单引号转义,避免语法错误或注入风险。
内容的提问来源于stack exchange,提问作者jubi
相关产品推荐
相关产品推荐

