Ich muss zur Laufzeit eine LINQ To SQL-Anweisung basierend auf den Eingaben eines Benutzers erstellen, und ich kann anscheinend nicht herausfinden, wie die WHERE-Klausel dynamisch erstellt werden kann.
Ich habe kein Problem mit Folgendem:
string Filters = "<value>FOO</value>";
Where("FormattedMessage.Contains(@0)",Filters)
Was ich aber wirklich brauche, ist, die gesamte WHERE-Klausel dynamisch zu gestalten. Auf diese Weise kann ich zur Laufzeit mehrere Bedingungen wie folgt hinzufügen (grobe Idee):
foreach (Filter filter in filterlist)
{
whereclause = whereclause + "&& formattedmessage.contains(filter)";
}
Ich weiß nicht, welche Datentypen hier verwendet werden, aber warum versuchen Sie nicht, eine allgemeine Abfrage zu verwenden?
var query = context.Messages
.AsQueryable();
foreach (Filter filter in filterlist)
{
query = query
.Where(m => m.Contains(filter));
}
Dadurch werden alle Bedingungen mit AND verkettet (wie in Ihrer Frage angegeben).
Sie können auch die PredicateBuilder-Klasse verwenden. Auf diese Weise können Sie Ihrem Baum dynamisch UND / ODER-Bedingungen hinzufügen. Siehe http://www.albahari.com/nutshell/predicatebuilder.aspx