我正在尝试根据用户指定的参数(基本搜索功能)检索订单列表。用户将输入一个 orderId 或一堆其他参数,这些参数将被包装成一条消息,并最终进入下面的方法。我的问题是,我如何只查看实际具有值的参数?因此,如果用户要输入收到的日期范围和商店编号,并且所有其他字段都为空,我想返回在日期范围内收到的商店的订单并忽略所有空参数。起初我以为我可以使用连词,但我看不到忽略空参数的方法。然后我开始将事情拆分到主表达式下方的 if 语句中,但是如果用户提供了 externalId,我不想查看这些条件。
public IList<Core.Order> GetOrderByCriteria
(
string ExternalId,
int? Store,
int? Status,
DateTime? beforeTransmissionDate, DateTime? afterTransmissionDate,
DateTime? beforeAllocationProcessDate, DateTime? afterAllocationProcessDate,
DateTime? beforeReceivedDate, DateTime? afterReceivedDate
)
{
try
{
NHibernate.ICriteria criteria = NHibernateSession.CreateCriteria(typeof(Core.Order))
.Add(Expression.Or
(
Expression.Like("ExternalId", ExternalId),
Expression.Conjunction()
.Add(Expression.Between("ReceivedDate", beforeReceivedDate, afterReceivedDate))
.Add(Expression.Between("TransmissionDate", beforeTransmissionDate, afterTransmissionDate))
.Add(Expression.Between("AllocationProcessDate", beforeAllocationProcessDate, afterAllocationProcessDate))
)
);
if(Store.HasValue)
criteria.Add(Expression.Eq("Status", Status));
if(Status.HasValue)
criteria.Add(Expression.Eq("Store", Store));
return criteria.List<Core.Order>();
}
catch (NHibernate.HibernateException he)
{
DataAccessException dae = new DataAccessException("NHibernate Exception", he);
throw dae;
}
}