public virtual string MakeWhereClause(Dictionary<string, object> keyFields, string paramPrefix = "", bool useParameters = true) { keyFields = keyFields ?? new Dictionary<string, object>(); // TODO: Figure out how to pass null values as parameters // instead of hardcoding them in here var nullFields = keyFields.WhereValues(v => v == DBNull.Value || v == null).Keys; var nullFieldParts = nullFields.Select(x => x + " is null"); var nonNullFields = keyFields.Except(nullFields).Keys; var nonNullFieldParts = useParameters ? nonNullFields.Select(x => x + " = @" + paramPrefix + x) : nonNullFields.Select(x => x + " = " + SqlLiteral(keyFields[x])); var whereClause = ""; if (keyFields.Any()) whereClause = " WHERE " + nullFieldParts.And(nonNullFieldParts).Join(" AND "); return whereClause; }
public void WhereValues() { var dict = new Dictionary<string, int>() { { "one", 1 }, { "two", 2 }, { "three", 3 } }; Assert.AreEqual("([one,1],[two,2])", dict.WhereValues(v => v < 3).Print()); }