gpt4 book ai didi

c# - 几个嵌套的if条件

转载 作者:行者123 更新时间:2023-11-30 13:55:57 24 4
gpt4 key购买 nike

我有五个必须检查的条件(即用户是否要使用此字段进行搜索)。有四个组合框和一个文本字段。用户可以根据需要使用任意字段或多个字段进行搜索。为了检查用户选择了哪个字段,我构建了几个 if 和 else if 语句。但是当只针对两个条件这样做时,我意识到这对于五个条件来说将是多么乏味的任务有没有更好的方法来做到这一点?

if  (cmbAgent.Text=="")
{
if (cmbDegree.Text=="")
{
OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM UniversityData", connection);
}
else
{
OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM UniversityData WHERE Expertise LIKE '%" + cmbDegree.Text + "%' ", connection);
}
}
else if(cmbDegree.Text=="")
{
OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM UniversityData WHERE SourceOfContact LIKE '%"+ cmbAgent.Text + "%' ", connection);
}
else
{
OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM UniversityData WHERE SourceOfContact LIKE '%" + cmbAgent.Text + "%' and Expertise LIKE '%" + cmbDegree .Text + "%' ", connection);
}

最佳答案

如果用户需要/想要输入多个值怎么办?
您可以轻松地动态构建查询。

顺便说一句,你应该使用查询参数来防止SQL注入(inject)。

// the "where 1=1" allows to always concatenate "and xxx"
// instead of testing if there were fulfilled conditions before
var query = "SELECT * FROM UniversityData WHERE 1 = 1";

var parameters = new Dictionary<string, string>();

if (txtDegree.Text != "")
{
query += " AND Expertise like '%' + ? + '%' ";
parameters.Add("degree", txtDegree.Text);
}

if(txtAgent.Text != "")
{
query += " AND SourceOfContact like '%' + ? + '%' ";
parameters.Add("agent", txtAgent.Text);
}

OleDbDataAdapter da = new OleDbDataAdapter(query, connection);
// add the parameters
foreach (var p in parameters) {
da.SelectCommande.Parameters.Add(p.Key, OleDbType.VarChar, p.Value);
}

请注意 OleDb 不支持命名参数。如果可以,我会考虑切换到 Sql 命令和适配器。

顺便说一句,如果您曾经可以/想要使用 Linq 来构建您的查询(例如通过 Entity Framework 或任何其他 ORM),您也可以这样做,因为 Linq 和 Entity Framework 一起是后期绑定(bind)的(这意味着在实际读取结果之前不会执行查询)。

// build the query
var results = from ud in context.UniversityData
select ud;

if (txtDegree.Text != string.Empty) {
results = from ud in results
where ud.Expertise.Contains(txtDegree.Text)
select ud;
}

if (txtAgent.Text != string.Empty) {
results = from ud in results
where ud.SourceOfContact.Contains(txtAgent.Text)
select ud;
}

// use the results
myControl.DataSource = results.ToList(); // the ToList() call actually calls the query

关于c# - 几个嵌套的if条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30933259/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com