我nHibernate Criteria
对这种类型的场景使用查询,因为它们非常灵活,您可以根据提供的搜索参数随时构建它们。
我根据您在问题中指定的一些标准在下面为您创建了一个基本示例,您应该能够修改我的示例以满足您的特定需求。
public IList<ApiData> SearchApiData(int? rowStatus, DateTime? createdDate)
{
ICriteria query = _session.CreateCriteria<ApiData>();
if (rowStatus.HasValue)
{
query.Add(Restrictions.Eq("RowStatus", rowStatus.Value));
}
if (createdDate.HasValue)
{
query.Add(Restrictions.Eq("CreatedDate", createdDate.Value));
}
return query.List<ApiData>();
}
此外,当我有许多搜索参数时,我通常会创建一个类结构,以使我能够在您的情况下将它们传递给我的应用程序,例如:
public class ApiDataCriteria{
public int? RowStatus {get;set;}
public DateTime? Created {get;set;}
public DateTime? Modified {get;set;}
}
根据您当前的搜索条件(很可能基于 UI 中的用户选择)填充此内容,然后传递到我在上面创建的方法中,如下所示:
public IList<ApiData> SearchApiData(ApiDataCriteria criteria)
{
ICriteria query = _session.CreateCriteria<ApiData>();
if (criteria.rowStatus.HasValue)
{
query.Add(Restrictions.Eq("RowStatus", criteria.rowStatus.Value));
}
if (criteria.createdDate.HasValue)
{
query.Add(Restrictions.Eq("CreatedDate", criteria.createdDate.Value));
}
return query.List<ApiData>();
}
这样,您只需要一个方法,即使您稍后添加更多搜索条件,其签名也不会改变。