Laden...

DataTable Filtern mit String-Verkettungen ?

Erstellt von echdeneth vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.151 Views
echdeneth Themenstarter:in
161 Beiträge seit 2019
vor 4 Jahren
DataTable Filtern mit String-Verkettungen ?

Ich möchte Strings für einen Datatable Filter verketten, nach folgendem Schema:

dt.DefaultView.RowFilter = string.Join(" AND ", filter)

Als Quelle nehme ich ein Array (filter). Soweit so gut.

Wenn ein String des Arrays jedoch keine Daten enthält (""), werden die Strings dennoch verkettet:

Wert1 = 'bla' AND Wert2 LIKE 'blabla' AND

Natütlich könnte ich auch Tonnenweise Zeilen schreiben mit Zahllos verschachtelten IF's und dergleichen, aber da muss es doch was besseres geben... mir fällt nur nichts ein

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

16.825 Beiträge seit 2008
vor 4 Jahren

Du kannst die gebundene Quelle problemlos mit Linq und entsprechenden Expressions vorfiltern, bevor die gebunden wird.
Dann brauchste diese String-Frickerlei nicht.

5.658 Beiträge seit 2006
vor 4 Jahren

Du brauchst du nur die leeren Werte aus dem Array zu filtern:

filter.Where(m => !string.IsNullOrEmpty(m))

Oder habe ich was falsch verstanden?

Weeks of programming can save you hours of planning

echdeneth Themenstarter:in
161 Beiträge seit 2019
vor 4 Jahren

Du kannst die gebundene Quelle problemlos mit Linq und entsprechenden Expressions vorfiltern, bevor die gebunden wird.
Dann brauchste diese String-Frickerlei nicht.

Meinst du so:


            IEnumerable<string> filter1 = from str in f where str != "" || str != null select str;
            var fii = new List<string>();
            foreach (string str in filter1)
            {
                fii.Add(str);
            }
            Ergebnis3.Text = string.Join(" und ", fii);


Namen sind Wurscht, da Code nur zur Übung dient

f ist ein Array mit Werten aus Combos und Textboxen, die strings in diesem Array können/dürfen auch mal null oder leer oder sonstwas sein. Dann müssen die strings raus.

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

16.825 Beiträge seit 2008
vor 4 Jahren

Nein - damit filterst Du immer noch in der UI und nicht wie ich gemeint hab in den Daten/der Quelle.
Aber das würde MrSparkle's Antwort entsprechen.

echdeneth Themenstarter:in
161 Beiträge seit 2019
vor 4 Jahren

Du brauchst du nur die leeren Werte aus dem Array zu filtern:

filter.Where(m => !string.IsNullOrEmpty(m))  

Oder habe ich was falsch verstanden?

Nein, funktioniert nicht - nichts was ich versuche funktioniert 🤔


            string[] f = { _c1, _c2, Tb_01.Text, Tb_02.Text, Tb_03.Text, _schalter };
            f.Where(m => !string.IsNullOrEmpty(m));
            l01.Content = string.Join(" und ", f);

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

5.658 Beiträge seit 2006
vor 4 Jahren

Du solltest natürlich auch das Ergebnis der Where-Methode verwenden.

Schau dir im Debugger an, was dein Code macht: [Artikel] Debugger: Wie verwende ich den von Visual Studio?

Weeks of programming can save you hours of planning

echdeneth Themenstarter:in
161 Beiträge seit 2019
vor 4 Jahren

Habe es hinbekommen, Danke


            var fff = f.Where(m => !string.IsNullOrEmpty(m));

            l01.Content = string.Join(" und ", fff);

Ich dachte es sei irgendwas komplizierteres..., es war eher noch einfacher XD

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

T
2.221 Beiträge seit 2008
vor 4 Jahren

An den Bezeichnungen solltest du noch arbeiten 😉
Falls du später mal viele Filter hast, sollten diese auch klare Namen haben andene sich der Sinn ableiten lässt.

Oder alternativ spar die das zwischenspeichern in Variablen und gibt diese gleich an die String.Join Funktion.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.