Laden...

Wie einen Filter für SQL Abfrage per ComboBox, Toggle,TextBox, etc zusammenbauen?

Erstellt von echdeneth vor 3 Jahren Letzter Beitrag vor 3 Jahren 407 Views
echdeneth Themenstarter:in
161 Beiträge seit 2019
vor 3 Jahren
Wie einen Filter für SQL Abfrage per ComboBox, Toggle,TextBox, etc zusammenbauen?

Moin, ich habe ein Projekt (MVVM) in welchem eine DataGrid mit aus MySQL eingelesenen Werten, sowie (aus der linken Seite) mehrere Filteroptionen enthalten sind.

ComboBox, ToggleButton, TextBox und DatePicker

Damit möchte ich den Query zusammenbauen.

Zwar habe ich eine grobe Vorstellung wie das bewerkstelligt werden kann, aber vielleicht habt ihr ja eine gute Idee.

Meine Soweit:
Binding an Property ->
Bei NotifyPropertyChanged()-Event: Aufruf Methode zum Abfragen aller Propertys ->
...

Beim "Zusammenbauen" bin ich mir jedoch nicht sicher

Danke im Vorraus für eure Ideen

"Man muß die Dinge so einfach wie möglich machen. Aber nicht einfacher." Albert Einstein

5.658 Beiträge seit 2006
vor 3 Jahren

Das wäre eine Lösung:


public string FilterQuery
{
  get => filterQuery;
  set 
  {
      if (filterQuery == value)
        return;
      filterQuery = value;
      NotifyOfPropertyChange(nameof(FilterQuery));
      NotifyOfPropertyChange(nameof(FilteredItems));
  }
}


public YourFilterItemType SelectedFilterItem
{
  // ...
}


public IEnumerable<YourItemViewModel> FilteredItems
{
  get
  {
      var result = allItems;
      if (!string.IsNullOrEmptyOrWhiteSpace(FilterQuery))
        result = result.Where(m => m.Name.ToLower().StartsWith(FilterQuery.ToLower));
      // ...
      return result;
  }
}

Eine andere Möglichkeit wäre es, ReactiveUI zu verwenden. Hier gibt es eine Einführung in das Arbeiten mit Collections mit ein paar Beispielen: ReactiveUI Handbook.

Edit:

Ich hab übersehen, daß du die Filter auf die SQL-Abfrage anwenden willst. In dem Fall solltest du statt allItems zu filtern, die Abfrage auf Basis der Rückgabe deiner Repository.Query-Methode anwenden. Das muß auch nicht im ViewModel stattfinden, sondern man kann das auch in einem Service kapseln, der die Filter-Parameter entgegen nimmt und die Resultate zurückliefert. Und die Abfrage dann auch möglichst asynchron ausführt.

Weeks of programming can save you hours of planning