我有这两个请求
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;
所以条件是,如果价格为空,我需要从数据库导入数据,如果价格不为空,我们需要从数据库大陆导入数据。
我如何用一个请求而不是两个请求来做到这一点?
Biscuits在他的评论中有一个好主意:有条件地应用Where
子句。这将只产生一个DB查询,减少重复代码,并保持代码清晰。
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<T>
,例如List<Produit>
或通过接口IList<Produit>
。ArrayList
上缺少泛型使得它更难使用,而且它比新选项慢。然后您的返回代码变为
return query.ToList();