Ich arbeite gerade an einer Suche nach einer Website und ich stecke mit einem Problem fest, das nicht einmal so schwer zu lösen scheint. Ich bin einfach nicht in der Lage, die Lösung selbst herauszufinden.Suche mit mehreren Bedingungen?
Situation: Im aktuellen Stand meiner Suche ich die Ereignisse Daten sortieren kann (ich kann Oktober zum Beispiel wählen, und es wird nur die Ereignisse zeigen, die im Oktober geschehen), für die Kategorien (Die Ereignisse jeweils haben Kategorien) und sogar Text suchen. Wenn ich Oktober als Monat und Festival als Kategorie auswähle, bekomme ich alle Ereignisse im Oktober und alle Festivals. Ich will nur die Feste, die im Oktober stattfinden. Irgendwelche Ideen, wie ich das erreichen könnte?
Dies ist, was ich bisher habe:
var validEvents = new List<Item>();
var allEvents = ((LinkField)this.controlItem.Fields["Event Container"]).TargetItem.Children.ToList(); // getting the events
if (this.ddlMonths.SelectedIndex != 0 || this.ddlCategories.SelectedIndex != 0 || this.searchQuery.Text != string.Empty)
{
foreach (var currentEvent in allEvents)
{
var isValid = false;
// 1. Check for months
if (this.ddlMonths.SelectedIndex != 0)
{
// .. validation if event should be displayed
if (startDate <= monthDates[1].Date && endDate >= monthDates[0].Date)
{
isValid = true;
}
}
// 2. Check for categories
if (this.ddlCategories.SelectedIndex != 0)
{
foreach (var eventCategory in ((MultilistField) currentEvent.Fields["Categories"]).GetItems())
{
if (eventCategory["Category"].ToLower() == this.ddlCategories.SelectedValue.ToLower())
{
isValid = true;
}
}
}
// 3. Check for search query
if (this.searchQuery.Text != string.Empty)
{
var searchText = this.searchQuery.Text;
if (currentEvent["Title"].Contains(searchText) || currentEvent["Text"].Contains(searchText))
{
isValid = true;
}
}
if (isValid)
{
validEvents.Add(currentEvent);
}
}
}
Sie folgenden Code folgt, sollten Sie 3 Liste für die drei Filter machen Sie haben, dann füge die 3 in die endgültige Liste ein, die nur die gleichen Elemente in den 3 Listen enthält. Dies ist nicht sehr optimal, aber es ist eine einfache Lösung. – Raskayu
Was hat Ihre Frage mit dem Sortieren zu tun? Ich sehe den Punkt dieses Tags nicht. Was die Frage betrifft, die du gestellt hast, IMHO, du machst alles falsch. Erstens, wenn Sie die ganze Suche als eine einzelne Schleife schreiben möchten, können Sie das tun, aber Ihre Schleife ist zu kompliziert. Befreien Sie sich von 'isValid' und setzen Sie' continue' bei jeder Bedingung fort, die _exclude_ ein Element enthält. Jedes Element, das bis zum Ende der Schleife überlebt, kann enthalten sein. Aber wirklich, diese Art von Ding ist, wofür LINQ ist. Sie sollten etwas über die eingebauten C# /. NET-Funktionen herausfinden, um genau diese Art von Dingen zu unterstützen. –
Alles klar @PeterDuniho, ich werde einen Blick darauf werfen – Awusuwah