每当看到很多项目中,多条件查询中,一些人为了拼接SQL脚本,直接来一个"SELECT [Column] FROM [Table] WHERE 1 = 1"我就来气,这么做的目的,仅仅是为了后面直接可以拼接类似" AND [Column] = value"这种格式,而且不会出错哦。
实际上C#语言中有很多方法可以保障字符串拼接。
1. string.Concat
string.Concat 方法是用来做字符串拼接的,如果字符串拼接的数量不多,建议可以使用此方法。例如:
string name = Console.ReadLine(); string welcome = "welcome to C#"; string result = string.Concat("Hello ", name, ", ", welcome); Console.WriteLine(result);
输入:Jerry
输出:Hello Jerry,welcome to C#
此方法相当简单,仅仅是将字符串连起来,不再多讲。
2.string.Join
string.Join方法用处还是比较多的,这个方法是做什么的呢?我们还是先看例子:
string[] strs = new string[] { "Hello Jerry", "welcome to C#" }; string result = string.Join(", ", strs); Console.WriteLine(result);
输出:Hello Jerry,welcome to C#
此方法意思,将数组中的每个元素都连接起来,Join的第一个参数,是表示此次分割的分割标识符,是一个字符串。我们不妨再回头看看前面提到的"SELECT [Column] FROM [Table] WHERE 1 = 1"。
我现在将SQL定义为"SELECT [Column] FROM [Table]",看代码:
List<string> conditions = new List<string>(); char[] likeFlag = new char[] { '%', '%'}; string strSQL = "SELECT [Column] FROM [Table]"; if (!string.IsNullOrEmpty(name)) { conditions.Add("Name = @Name"); parameters.Add(new SqlParameter("@Name", name)); } if (!string.IsNullOrEmpty(content)) { conditions.Add("Content LIKE @Content"); parameters.Add(new SqlParameter("@Content", string.Concat("%", content, "%"))); } if (!string.IsNullOrEmpty(address)) { conditions.Add("Address LIKE @Address"); parameters.Add(new SqlParameter("@Address", string.Join(address, likeFlag))); } if (conditions.Count > 0) { string condition = string.Join(" AND ", conditions); strSQL = string.Concat(strSQL, " WHERE ", condition); }
当然这段代码并不是很完美,也不需要完美,毕竟只是以此来抛砖引玉,看懂即可。声明的char数组来组装模糊查询百分号的方法,也不建议模仿,仅仅是说这样用也可以罢了。用到了string.IsNullOrEmpty方法就不多解释了,实在不懂就劳烦您查一下。
那么仅仅在此有用吗?非也,其实Join方法用途相当广泛,如果你是做Web开发的,大量地方因为Join方法都可以变得简单的,特别需要说明的是,JavaScript的字符串操作也支持Join和Concat方法,屡试不爽,相信你JSON或者数组,需要组装为能提交的字符串的时候,难道就没有冲动用用这两个方法?