This question is not a duplicate. I am looking for an approach in which I can pass in a Hashtable for any number of key-value params and related where clauses, and that hashtable can be dynamically integrated into the lambda search. The other post doesn't answer this.
I have 3 overload methods:
public static bool DoesRecordExist(string keyColumn, string keyValue, DataTable dt) {
if (dt != null && dt.Rows.Count > 0) {
bool exists = dt.AsEnumerable().Where(r => string.Equals(SafeTrim(r[keyColumn]), keyValue, StringComparison.CurrentCultureIgnoreCase)).Any();
return exists;
} else {
return false;
}
}
public static bool DoesRecordExist(string keyColumn1, string keyColumn2, string keyValue1, string keyValue2, DataTable dt) {
if (dt != null && dt.Rows.Count > 0) {
bool exists = dt.AsEnumerable().Where(r => string.Equals(SafeTrim(r[keyColumn1]), keyValue1, StringComparison.CurrentCultureIgnoreCase) && string.Equals(SafeTrim(r[keyColumn2]), keyValue2, StringComparison.CurrentCultureIgnoreCase)).Any();
return exists;
} else {
return false;
}
}
public static bool DoesRecordExist(string keyColumn1, string keyColumn2, string keyColumn3, string keyValue1, string keyValue2, string keyValue3, DataTable dt) {
if (dt != null && dt.Rows.Count > 0) {
bool exists = dt.AsEnumerable().Where(r => string.Equals(SafeTrim(r[keyColumn1]), keyValue1, StringComparison.CurrentCultureIgnoreCase) && string.Equals(SafeTrim(r[keyColumn2]), keyValue2, StringComparison.CurrentCultureIgnoreCase) && string.Equals(SafeTrim(r[keyColumn3]), keyValue3, StringComparison.CurrentCultureIgnoreCase)).Any();
return exists;
} else {
return false;
}
}
These all work as expected, and as you can see, all 3 are identical, just with increasing numbers of params and corresponding where clause arguments. And now I need to add yet another overload with 5 key/value pairs. Clearly this is getting silly.
How can I convert all these overloads into a single function in which I simply pass in a Hashtable of key-value pairs (or some other collection that makes equal or better sense)?