Ich habe viele Posts über das Erstellen von ExpandoObject
Objekten ExpandoObject
, aber in meinem Fall funktioniert es nicht. Ich muss ein Objekt wie erstellen
var someObj = new {
term1 = "someValue",
term2 = "other",
...
};
Im Grunde benutzen wir Dapper
und müssen eine Abfrage dynamisch erstellen, wobei die WHERE
Klausel aus einem gegebenen Array von Argumenten erzeugt wird. Wir verallgemeinern keine Anfragen! Es ist eine einzelne Methode, die eine variable Anzahl von Argumenten erhält und wir müssen OR
jeden Wert einer einzelnen Spalte überprüfen.
Im Moment ist die einzige praktikable Lösung, System.Data.SqlClient.SqlConnection
und direkt zu verwenden, oder gibt es eine Möglichkeit, dies zu ermöglichen?
Aktualisieren:
Dies ist , was höchstwahrscheinlich funktionieren soll, aber nicht:
string inWhere = null;
dynamic inTerms = new ExpandoObject();
IDictionary<string, object> inTermsDict = inTerms;
if (!(string.IsNullOrEmpty(filter.Term) || string.IsNullOrWhiteSpace(filter.Term))) {
inWhere = "(" + string.Join(" OR ", filter.Terms.Select((t, i) => "{0} LIKE @p" + i)) + ")";
int termIndex = 0;
foreach (string term in filter.Terms) {
inTermsDict.Add("p" + (termIndex++), term);
}
}
// ...
var rows = db.Query("SELECT * FROM {table} WHERE {baseCondition}" +
(string.IsNullOrEmpty(inWhere) ? "" : string.Format(" AND " + inWhere, "columnName")),
inTerms as object);
Nur um meine eigene Frage zu beantworten, als wir heute die richtige Lösung gefunden haben.
Einfach gesagt, haben wir die IDynamicParameters
Und diese Klasse löst einfach alles und fungiert als ein Dictionary
.
var inTerms = new Dapper.DynamicParameters();
inTerms.Add("@p" + (termIndex++), somveValue);
Jeder ist glücklich!