我用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>();
}
這樣,你只需要一個單一的方法,其符號即使您稍後添加更多搜索條件,ature也不會改變。
來源
2013-05-30 20:01:02
CSL