Ich habe einige Probleme mit einer Suche. Ich versuche, einen Kunden auf Name + Nachname, Referenz oder CompanyName zu finden. Ich habe es geschafft zu arbeiten, aber die Bestellung ist nicht 100%.Linq/Lamba Nach mehreren Zeichenfolgen suchen
Hier ist mein ursprüngliches Objekt
var q = from row in DataAccess.metadata.db_Customer
where row.accountID == accountID
&& row.isActive
orderby row.Name
select new bl_customerNames
{
customerID = row.customerID,
CustomerName = row.Name + " " + row.LastName,
Company = row.Company,
Reference = row.reference,
Email = row.Email,
CurrencyCode = row.CurrencyCode,
isSuspended = row.isSuspended
};
Dann habe ich die folgenden Filter.
if (!string.IsNullOrEmpty(search))
{
q = q.Where(x => (x.CustomerName.Contains(search) || x.Reference.Contains(search) || x.Company.Contains(search)));
}
Obwohl dies einen fairen Job macht sich die Liste nicht wirklich logisch sinnvoll, da es nicht startet nicht begünstigt mit oben enthält.
Ich kam dann mit einer Ranking-Lösung, wo ich Rang beginnt mit höher als Enthält.
Hier ist mein Code dafür:
var q = from row in DataAccess.metadata.db_Customer
where row.accountID == accountID
&& row.isActive
orderby row.Name
select new bl_customerNames
{
customerID = row.customerID,
CustomerName = row.Name + " " + row.LastName,
Company = row.Company,
Reference = row.reference,
Email = row.Email,
CurrencyCode = row.CurrencyCode,
isSuspended = row.isSuspended,
Rank = ((row.Name + " " + row.LastName).StartsWith(search) || row.reference.StartsWith(search) || row.Company.StartsWith(search)) ? 1 : ((row.Name + " " + row.LastName).Contains(search) || row.reference.Contains(search) || row.Company.Contains(search)) ? 2 : 0
};
Ich würde dann wie folgt filtern:
q = q.Where(r=>r.Rank > 0).OrderBy(r => r.Rank);
Allerdings, wenn ich auf Referenz Suche macht es nichts zurück.
Also meine Frage ist, wird meine aktuelle Methode funktioniert auch warum gibt nichts zurück, wenn ich auf Referenz oder Firmennamen suche? Was würde die korrekte Art, ein StartsWith zu tun, dann beinhalten und immer noch eine Art alphabetischer Reihenfolge nach StartsWith List halten.
Bitte beachten Sie, ich bin immer noch ein Junior-Entwickler und jede Hilfe wäre willkommen.
Was ist die Frage? – MichaelThePotato
Ich habe meine Frage geändert. –
versuchen, die Filterung und Ordnung in der ursprünglichen Abfrage oder Aufruf von 'ToList()' auf es vor der Filterung (nur eine Ahnung) – slawekwin