【发布时间】:2015-10-19 19:10:54
【问题描述】:
我有以下查询,我从 UI 传递了 4 个参数。 BU 和 Region 在 UI 中有单选按钮选项(All、Option1、Option2、Option3 等)。选项 1 - 3 是数据中的值,而“全部”不是。
有没有办法更有效地编写以下内容?例如,如果 BU 或 Region 值是“来自 UI”的“全部”(不是数据集中的值),如果选择了 all 是否有一个字符可以分配给 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 以在 Where 中进行比较。我想知道是否有一个字符可以分配给 All 选项,这样它就不会被过滤。
标签: c# entity-framework linq