The code pretty much explains what I am doing here. Just wondering if anyone can think of a better way.
public class AttachmentQuery
{
/// <summary>
/// Initializes a new instance of the <see cref="AttachmentQuery"/> class.
/// </summary>
/// <param name="type">The type.</param>
/// <param name="status">The status.</param>
/// <param name="sort">The sort.</param>
/// <param name="order">The order.</param>
/// <param name="page">The page.</param>
public AttachmentQuery(string type, string status, SortAttachment sort, SortOrder order, int? page)
{
IAttachmentSpecification specification = null;
if (!string.IsNullOrEmpty(type))
{
specification = new AttachmentFileTypeSpecification(type);
}
if (!string.IsNullOrEmpty(status))
{
if (specification == null)
{
specification = new AttachmentStatusSpecification(status.AsEnum<AttachmentStatus>());
}
else
{
var spec = new AndSpecification<Attachment>(
specification,
new AttachmentStatusSpecification(status.AsEnum<AttachmentStatus>())
);
specification = spec as IAttachmentSpecification;
}
}
if (specification == null)
{
specification = new AttachmentSpecification();
}
specification.Page = page;
specification.Limit = Setting.AttachmentPageLimit.Value;
specification.Sort = sort;
specification.Order = order;
this.Specification = specification;
}
/// <summary>
/// Gets or sets the specification.
/// </summary>
/// <value>The specification.</value>
public IAttachmentSpecification Specification
{
get;
private set;
}
}