У меня есть запрос ниже, где я передаю 4 параметра из пользовательского интерфейса. BU и Region имеют параметры переключателя (All, Option1, Option2, Option3 и т. Д.) В пользовательском интерфейсе. Параметры 1 - 3 - это значения в данных, тогда как «Все» - нет.Проверки нескольких условий в запросе?
Есть ли способ написать ниже более эффективно? Например, если значения BU или Region являются «Все» из пользовательского интерфейса »(которые не являются значениями в наборе данных), есть ли символ, который я могу присвоить bu или region, если все выбрано так, что запрос знает, чтобы выбрать все значения?
Я не знаю, есть ли такая вещь, но я хочу избежать необходимости делать что-то вроде ниже.
public string GetAvgSeatPrice(string bu, string region, DateTime? startDate, DateTime? endDate)
{
if (bu.Equals("All"))
{
var averageSeatPrice = (from r in db.Registrations
where
//r.BusinessUnit.Equals(bu) &&
r.Region.Equals(region) &&
r.StartDate >= startDate &&
r.EndDate <= endDate &&
r.ActualPrice > 0
select r.ActualPrice).Average();
var AvgSeatPrice = "$" + string.Format("{0:0.00}", averageSeatPrice);
return AvgSeatPrice;
}
else if (region.Equals("All"))
{
var averageSeatPrice = (from r in db.Registrations
where
r.BusinessUnit.Equals(bu) &&
// r.Region.Equals(region) &&
r.StartDate >= startDate &&
r.EndDate <= endDate &&
r.ActualPrice > 0
select r.ActualPrice).Average();
var AvgSeatPrice = "$" + string.Format("{0:0.00}", averageSeatPrice);
return AvgSeatPrice;
}
else if (bu.Equals("All") && region.Equals("All"))
{
var averageSeatPrice = (from r in db.Registrations
where
//r.BusinessUnit.Equals(bu) &&
// r.Region.Equals(region) &&
r.StartDate >= startDate &&
r.EndDate <= endDate &&
r.ActualPrice > 0
select r.ActualPrice).Average();
var AvgSeatPrice = "$" + string.Format("{0:0.00}", averageSeatPrice);
return AvgSeatPrice;
}
else
{
var averageSeatPrice = (from r in db.Registrations
where
r.BusinessUnit.Equals(bu) &&
r.Region.Equals(region) &&
r.StartDate >= startDate &&
r.EndDate <= endDate &&
r.ActualPrice > 0
select r.ActualPrice).Average();
var AvgSeatPrice = "$" + string.Format("{0:0.00}", averageSeatPrice);
return AvgSeatPrice;
}
}
}
}
Что не так с вашим текущим кодом? У вас есть ошибка? –
Если я перехожу в Вариант 1, 2 или 3, он работает, потому что это значения в данных, которые я могу назначить этим параметрам.Если я выберу «Все», для сравнения нет ничего, потому что нет никакой ценности, чтобы назначить All для сравнения в «Где». Мне интересно, есть ли символ, который я могу назначить для опции «Все», чтобы он не фильтровал. – JReam