【问题标题】:how can do thats 2 sql request in one怎么能把 2 个 sql 请求合二为一
【发布时间】:2016-09-16 14:25:43
【问题描述】:

我有这两个请求

if (prix1=="" && prixe2=="") {

    ArrayList al = new ArrayList();
    al.AddRange((from prodname in pms_data_.produit
        where prodname.desgnation == Desg || 
              prodname.labo.labo1 == Labo || 
              prodname.rayon.rayon1 == Ra || 
              prodname.Formf.form == FORM || 
              prodname.code == CODBARRE 
        select prodname).ToList());

    return al;
}
else
{
    int p1 = Convert.ToInt32(prix1);
    int p2 = Convert.ToInt32(prixe2);

    ArrayList al = new ArrayList();
    al.AddRange((from prodname in pms_data_.produit
        where prodname.desgnation == Desg || 
              prodname.labo.labo1 == Labo || 
              prodname.rayon.rayon1 == Ra || 
              prodname.Formf.form == FORM || 
              prodname.code == CODBARRE || 
              prodname.ppv >=p1 && prodname.ppv <=p2
        select prodname).ToList());

    return al;

因此,如果价格为空,我需要从数据库中导入数据,如果价格不为空,我需要从数据库中导入此数据大陆的价格。

我怎样才能用一个请求而不是 2 个请求来做到这一点?

【问题讨论】:

  • 你只会调用一次数据库,你把它包裹在一个 if,else 语句中只有一个条件会运行,你的意思是你会做什么,例如: if (prix1 !=" " && prixe2=="") 反之亦然?
  • 我会在调用 ToList 之前有条件地将 Where 应用到 IQueryable,或者在不应用过滤时设置 p1 = int.MinValue 和 p2 = int.MaxValue
  • 我需要用请求中的条件替换 if 和 else

标签: c# sql sql-server arraylist


【解决方案1】:

Biscuits 有一个好主意in his comment:有条件地应用Where 子句。这将导致只有一个数据库查询,减少重复代码,并保持代码清晰。

var query = from prodname in pms_data_.produit
            where prodname.desgnation == Desg || 
                  prodname.labo.labo1 == Labo || 
                  prodname.rayon.rayon1 == Ra || 
                  prodname.Formf.form == FORM || 
                  prodname.code == CODBARRE 
            select prodname;

if (!string.IsNullOrEmpty(prix1) && !string.IsNullOrEmpty(prixe2)) {
    int p1 = Convert.ToInt32(prix1);
    int p2 = Convert.ToInt32(prixe2);

    query = query.Where(prodname => prodname.ppv >= p1 && prodname.ppv <= p2);
}

return new ArrayList(query.ToList());

我将其切换为使用 IsNullOrEmpty,这更有可能是预期的行为。

如果可能,您应该放弃使用过时的 ArrayList 类并开始使用 List&lt;T&gt;,例如List&lt;Produit&gt; 或通过接口IList&lt;Produit&gt;ArrayList 缺少泛型使其更难使用,而且它比新选项慢。那么你的返回码就变成了

return query.ToList();

【讨论】:

  • 好主意 但是如果我没有在第一个查询中输入任何数据,所以我没有输入 no labo no desgnatio no ...我只输入价格,我认为结果不会是什么跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-23
  • 2023-03-13
相关资源
最近更新 更多