Laden...

Linq to EF Suche erstellen und mehrere Suchbegriffe mit Kommata trennen

Erstellt von Cokie vor 6 Jahren Letzter Beitrag vor 6 Jahren 1.020 Views
C
Cokie Themenstarter:in
33 Beiträge seit 2013
vor 6 Jahren
Linq to EF Suche erstellen und mehrere Suchbegriffe mit Kommata trennen

verwendetes Datenbanksystem: <MSSQL>

Nabend,

ich stehe momentan auf dem schlauch.

Ich habe ein kleines Webprojekt wo ich eine Suche Implementieren möchte.
Das ganze DB zeugs mache ich über EF.
Jetzt stoße ich aber an ein Problem beim EF bzw. eher beim Linq was die Suche in der Datenbank betrifft.

Folgendes Bsp.

Tabelle

ID | Name | Vorname | Strasse usw...

1 Max Mustermann Musterstrasse
2 Maxi Mustermann Musterstrasse
3 Muxi Musterfrau Strassenmuster

usw...

wenn ich jetzt per Linq die sache abfrage.

  public IQueryable<ConsumerModel> SearchResult(string searchString)
        {
///Macht mir die Komma trennung für die einzelnen Suchparameter
            var Splitarray = searchString.Split(',');

            IQueryable<ConsumerModel> search = null;
         
            //string tmp = Splitarray[1];
            switch (Splitarray.Count())
            {

                case 0:
                    search = from k in Dbcontext.Consumermodel select k;
                    break;
                case 1:
                    search = from k in Dbcontext.Consumermodel where  k.Name.Contains(Splitarray.FirstOrDefault()) select k;
                    break;
                case 2:
                search = from k in Dbcontext.Consumermodel where k.Name.Contains(Splitarray.FirstOrDefault()) && k.Name.Contains(Splitarray.OrderBy(x => x).Skip(1).FirstOrDefault()) select k;
                    break;
                default:
                    search = from k in Dbcontext.Consumermodel select k;
                    break;
            }
            return search;
          
          
        }

funktioniert das ganze auch.

Jetzt das große Aber.
Die Suche ist so gestaltet das man per Komma in der Textbox die Suchspalten ändern kann.
Also Max,Mustermann würde dann in der DB unter Vor- und Nachnamen spalten gesucht werden.
Wenn man jetzt z.B. ,Mustermann in die Textbox eingeben würde(ohne den Vornamen z.B.) bekomme ich kein Ergebnis da ja die Suchparameter nicht mehr vollständig ist.
Ich kann natürlich für jede erdenkliche Kombination eine eigene Linq Suchabfrage erstellen. Aber das wäre mir persönlich Zuviel aufwand, und zu fehleranfällig das man was vergisst.
Ich kann das ganze über das Sqlquery von dbcontext lösen da baue ich mir die Sqlbefehle zusammen allerdings hab ich ja dann nix mehr von EF 😉

Wie macht ihr den sowas wenn der Benutzer die Suchparameter selber "einstellen" kann und ihr das Linq to EF benutzt.

1.029 Beiträge seit 2010
vor 6 Jahren

Hi,

du kannst mal nach dem PredicateBuilder schauen - wenn ich mich recht entsinne kann man den für sowas einsetzen.

Allerdings hast du auch wichtigere Baustellen:
a) Du willst doch hoffentlich nicht wirklich so deine UI aufstellen?!
b) Wenn du nicht dazu gezwungen wirst - vermeide String-Frickelei - und brock sie dir nicht noch selbst ein... Bau dir eine Klasse für Suchbedingungen - dann würde ich an deiner Stelle erst nach dem PredicateBuilder suchen
c) case 0: kannst du dir dank default: sparen

LG

C
Cokie Themenstarter:in
33 Beiträge seit 2013
vor 6 Jahren

Den PredicateBuilder hatte ich auch schon gesehen. Finde ich aber auch nicht SO toll.

Zu A. meinst du die Komma Suche? Die verwendet ein Groß Software Anbieter von uns in seiner Suche auch. Und man kommt damit prima zurecht 😃

zu b und c. Das ist eine Test Geschichte womit ich gerade rumprobiere der Produktive Teile sieht dann anders aus 😉.