private static void AddCondition(SqlExpression<From> q, string defaultTerm, string quotedColumn, object value, QueryFieldAttribute implicitQuery) { var seq = value as IEnumerable; if (value is string) seq = null; var format = seq == null ? quotedColumn + " = {0}" : quotedColumn + " IN ({0})"; if (implicitQuery != null) { var operand = implicitQuery.Operand ?? "="; if (implicitQuery.Term == QueryTerm.Or) defaultTerm = "OR"; else if (implicitQuery.Term == QueryTerm.And) defaultTerm = "AND"; format = "(" + quotedColumn + " " + operand + " {0}" + ")"; if (implicitQuery.Template != null) { format = implicitQuery.Template.Replace("{Field}", quotedColumn); if (implicitQuery.ValueStyle == ValueStyle.Multiple) { if (seq == null) throw new ArgumentException("{0} requires {1} values" .Fmt(implicitQuery.Field, implicitQuery.ValueArity)); var args = new object[implicitQuery.ValueArity]; int i = 0; foreach (var x in seq) { if (i < args.Length) { format = format.Replace("{Value" + (i + 1) + "}", "{" + i + "}"); args[i++] = x; } } q.AddCondition(defaultTerm, format, args); return; } if (implicitQuery.ValueStyle == ValueStyle.List) { if (seq == null) throw new ArgumentException("{0} expects a list of values".Fmt(implicitQuery.Field)); format = format.Replace("{Values}", "{0}"); value = new SqlInValues(seq); } else { format = format.Replace("{Value}", "{0}"); } if (implicitQuery.ValueFormat != null) value = string.Format(implicitQuery.ValueFormat, value); } } else { if (seq != null) value = new SqlInValues(seq); } q.AddCondition(defaultTerm, format, value); }