C# 中的 join 用法示例

本文介绍两种SQL查询构造方法,一种是使用where 1=1作为起点来动态添加筛选条件,另一种是通过集合的方式组织筛选条件并在最后拼接。讨论了这两种方法的优缺点,并提供了具体的C#实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

示例代码:

        private void btnQuery_Click(object sender, EventArgs e)
        {
            StringBuilder sb = new StringBuilder();//解决加不加 where 问题的两种方法的比较。
            //加空格或者\n解决两个条件粘连的问题
            //1、用where 1=1解决where该不该加的问题
            sb.Append("select * from T_Customers where 1=1\n");//where 1=1 方法效率相对更低。因为如果不优化数据库时,where 1=1 可能会对数据库进行全体扫描。
            if (cbQueryByName.Checked)
            {
                sb.Append("and Name like @name\n");
            }
            if (cbQueryByMobile.Checked)
            {
                sb.Append("and MobilePhone like @mobile\n");
            }
            if (cbQueryByCarNum.Checked)
            {
                sb.Append("and CarNum like @carnum\n");
            }
            MessageBox.Show(sb.ToString());

            //2、用 join 解决where该不该加的问题
            List<string> listWhere = new List<string>();
            List<SqlParameter> listParameters = new List<SqlParameter>();
            if (cbQueryByName.Checked)//判断复选框触发事件,是否选中该复选框。
            {
                listWhere.Add("Name like @name");
                listParameters.Add(new SqlParameter("name","%"+txtQueryName.Text+"%"));
            }
            if (cbQueryByMobile.Checked)
            {
                listWhere.Add("MobilePhone like @mobile");
                listParameters.Add(new SqlParameter("mobile", "%" + txtQueryMobile.Text + "%"));
            }
            if (cbQueryByCarNum.Checked)
            {
                listWhere.Add("CarNum like @carnum");
                listParameters.Add(new SqlParameter("carnum", "%" + txtQueryCarNum.Text + "%"));
            }
            string sql = "select * from T_Customers\n";
            
            if (listWhere.Count > 0)
            {
                string sqlWhere = string.Join(" and ", listWhere.ToArray());//string.Join 方法效率相对更高。
                sql =sql+" where "+sqlWhere;
            }
            dataGridView1.DataSource = SqlHelper.ExecuteDataTable(sql, listParameters.ToArray());//.ToArray()的作用是转换为数组。
            MessageBox.Show(sql);

        }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值