private static bool TryParseDateTime(string value, WhereQueryEngineOptions options, out DateTime result) { if (DateTime.TryParseExact(value, "yyyy-MM-ddTHH:mm:ss.fffK", CultureInfo.InvariantCulture, DateTimeStyles.None, out result) || DateTime.TryParseExact(value, "yyyy-MM-ddTHH:mm:ss.fff", CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out result) || DateTime.TryParseExact(value, "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out result) || DateTime.TryParseExact(value, "yyyy-MM-ddTHH:mm:ssK", CultureInfo.InvariantCulture, DateTimeStyles.None, out result) || DateTime.TryParseExact(value, "yyyy-MM-ddTHH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out result)) { if (options.UseUtcDateTime) { result = result.ToUniversalTime(); } return(true); } return(false); }
public WhereQueryEngine(WhereQueryEngineOptions options) { _options = options; }
private static ConstantExpression GetConstantDateTime(string value, Type dataType, CompareOperator compareOperator, WhereQueryEngineOptions options) { if (value.IsNullOrEmpty() || compareOperator == CompareOperator.None) { return(null); } if (compareOperator == CompareOperator.ContainedIn) { var values = new List <DateTime>(); foreach (var item in value.Split('|')) { if (TryParseDateTime(item, options, out var valueItemDateTime)) { values.Add(valueItemDateTime); } } return(Expression.Constant(values, values.GetType())); } if (!TryParseDateTime(value, options, out var valueDateTime)) { return(null); } return(Expression.Constant(valueDateTime, dataType)); }
private static ConstantExpression GetConstantEnum(string value, Type dataType, CompareOperator compareOperator, WhereQueryEngineOptions options) { if (value.IsNullOrEmpty() || compareOperator == CompareOperator.None) { return(null); } if (compareOperator == CompareOperator.ContainedIn) { var values = value.Split('|').Select(v => Enum.Parse(dataType, v)).ToList(); try { return(Expression.Constant(values, values.GetType())); } catch { return(null); } } try { return(Expression.Constant(Enum.Parse(dataType, value), dataType)); } catch { return(null); } }
private static ConstantExpression GetConstantLong(string value, Type dataType, CompareOperator compareOperator, WhereQueryEngineOptions options) { if (value.IsNullOrEmpty() || compareOperator == CompareOperator.None) { return(null); } if (compareOperator == CompareOperator.ContainedIn) { var values = new List <long>(); foreach (var item in value.Split('|')) { if (Int64.TryParse(item, NumberStyles.Integer, CultureInfo.InvariantCulture, out var valueItemLong)) { values.Add(valueItemLong); } } return(Expression.Constant(values, values.GetType())); } if (!Int64.TryParse(value, NumberStyles.Integer, CultureInfo.InvariantCulture, out var valueLong)) { return(null); } return(Expression.Constant(valueLong, dataType)); }
private static ConstantExpression GetConstantBoolean(string value, Type dataType, CompareOperator compareOperator, WhereQueryEngineOptions options) { if (value.IsNullOrEmpty() || compareOperator == CompareOperator.None) { return(null); } var boolean = value.ToBoolean(); return(Expression.Constant(boolean, dataType)); }
private static ConstantExpression GetConstantString(string value, Type dataType, CompareOperator compareOperator, WhereQueryEngineOptions options) { if (value.IsNullOrEmpty() || compareOperator == CompareOperator.None) { return(null); } if (compareOperator == CompareOperator.ContainedIn) { var values = value.Split('|').ToList(); return(Expression.Constant(values, values.GetType())); } return(Expression.Constant(value, dataType)); }