-
-
Save MeoMix/0b29592051c85c5fb620 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public IList<Task> GetByWorkflowFilterCriteria(IList<WorkflowFilterCriteria> workflowFilterCriterias) | |
{ | |
var criteria = NHibernateSession | |
.CreateCriteria(typeof(Task), "Task") | |
.CreateCriteria("Task.Order", "Order") | |
.CreateAlias("Task.TaskDevice", "TaskDevice"); | |
AbstractCriterion taskAttributeCriteria = null; | |
foreach (var queryAttribute in workflowFilterCriterias) | |
{ | |
Attribute attribute = AttributeCache.Instance.GetByID(queryAttribute.AttributeID); | |
if (attribute != null) | |
{ | |
string field = string.Format("{0}.{1}", attribute.Entity, attribute.EntityProperty); | |
if (attribute.Entity == "TaskAttribute") | |
field = "TaskAttribute.Value"; | |
// Must convert values to objects otherwise hibernate does type checking between the filter value | |
// (will always be a string) and the database field type | |
object value1 = queryAttribute.Value1; | |
if (attribute.DataType == AttributeDataType.Numeric) | |
{ | |
int value = 0; | |
if (Int32.TryParse(queryAttribute.Value1, out value)) | |
value1 = value; | |
} | |
else if (attribute.DataType == AttributeDataType.Date) | |
{ | |
value1 = null; | |
DateTime dateTime; | |
if (queryAttribute.Value1 == "1/1/1") | |
value1 = DateTime.Now; | |
else if (DateTime.TryParse(queryAttribute.Value1, out dateTime)) | |
value1 = dateTime; | |
} | |
object value2 = queryAttribute.Value2; | |
if (attribute.DataType == AttributeDataType.Numeric) | |
{ | |
int value = 0; | |
if (Int32.TryParse(queryAttribute.Value2, out value)) | |
value2 = value; | |
} | |
else if (attribute.DataType == AttributeDataType.Date) | |
{ | |
value2 = null; | |
DateTime dateTime; | |
if (queryAttribute.Value2 == "1/1/1") | |
value2 = DateTime.Now; | |
else if (DateTime.TryParse(queryAttribute.Value2, out dateTime)) | |
value2 = dateTime; | |
} | |
// For CSV values | |
var values = queryAttribute.Value1.Split(',').ToList().Select(x => x.Trim()).ToList(); | |
AbstractCriterion expression = null; | |
if (queryAttribute.Comparator == WorkflowFilterComparator.Like) | |
expression = Restrictions.Like(field, value1); | |
else if (queryAttribute.Comparator == WorkflowFilterComparator.NotLike) | |
expression = Restrictions.Not(Restrictions.Like(field, value1)); | |
else if (queryAttribute.Comparator == WorkflowFilterComparator.In) | |
expression = Restrictions.In(field, values); | |
else if (queryAttribute.Comparator == WorkflowFilterComparator.NotIn) | |
expression = Restrictions.Not(Restrictions.Like(field, values)); | |
else if (queryAttribute.Comparator == WorkflowFilterComparator.Eq) | |
expression = Restrictions.Eq(field, value1); | |
else if (queryAttribute.Comparator == WorkflowFilterComparator.Ne) | |
expression = Restrictions.Not(Restrictions.Eq(field, value1)); | |
else if (queryAttribute.Comparator == WorkflowFilterComparator.Between && values.Count > 1) | |
expression = Restrictions.Between(field, values[0], values[1]); | |
else if (queryAttribute.Comparator == WorkflowFilterComparator.Ge) | |
expression = Restrictions.Ge(field, value1); | |
else if (queryAttribute.Comparator == WorkflowFilterComparator.Le) | |
expression = Restrictions.Le(field, value1); | |
if (attribute.Entity == "TaskAttribute") | |
{ | |
// This seems to be the only way I can chain Ands | |
if (taskAttributeCriteria == null) | |
taskAttributeCriteria = Restrictions.And( | |
Restrictions.Eq("TaskAttribute.AttributeID", attribute.ID), | |
expression); | |
else | |
taskAttributeCriteria = Restrictions.And(Restrictions.And( | |
Restrictions.Eq("TaskAttribute.AttributeID", attribute.ID), | |
expression), taskAttributeCriteria); | |
} | |
else | |
{ | |
criteria.Add(expression); | |
} | |
} | |
} | |
if (taskAttributeCriteria != null) | |
{ | |
criteria.CreateCriteria("Task.TaskAttributes", "TaskAttribute"); | |
criteria.Add(taskAttributeCriteria); | |
} | |
return criteria.List<Task>(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment