| 

.NET C# Java Javascript Exception

3
Hallo zusammen,
ich suche nach einer Idee wie man ein Objekt mit mehreren Properties (Listen von Eigenschaften) gegen bestimmte Anforderungen prüfen kann.

Beispielsweise habe ich einen Außendienstmitarbeiter der in mehreren Regionen eingesetzt werden kann und nur einige bestimmte Bereiche gut kann (bspw. er kennt sich mit Brandschutz aus). Ich versuchs mal mit Pseudocode deutlicher zu machen.

public class Mitarbeiter
{
List<Region> Regionen { get; set; }
List<Thema> Themenbereiche { get; set; }
}

public class Region
{
string Name { get; set; }
int Prio { get; set; } // bspw.: Prio 1 Hauptmitarbeiter, Prio 2 kann als Vertreter dienen, Prio 3 Vertreter des Vertretes, usw.
}

public class Thema
{
string Name { get; set; }
int Prio { get; set; } // Prio 1 Hauptmitarbeiter, Prio 2 kann als Vertreter dienen
}


Ich möchte jetzt aus einer Liste von Mitarbeitern die Mitarbeiter finden, die meinen Anforderungen entsprechen und ggf. mehr können. Also finde Mitarbeiter der in Region Süd arbeitet und sich auf jeden Fall mit Brandschutz auskennt. Anfragen dieser Art kommen recht häufig so dass ich relativ schnell die Mitarbeiter finden muss die es dürfen.

Würde man dies mit Hashvalues und nem Dictionary machen? Oder wie würdet ihr so etwas lösen.
News:
24.03.2011
Gast
31 1
2 Antworten
4
Du könntest via LINQ auf deine Mitarbeiterliste zugreifen und entsprechend selektieren. z.B. so:

List<Mitarbeiter> mitarbeiterListe = ...
var result = (from ma in mitarbeiterListe
where ma.Regionen.Any(r => r.Name == "Region Süd")
&& ma.Themenbereiche.Any(t => t.Name == "Brandschutz")
select ma).ToList();


(ungetestet)
24.03.2011
Mario Priebe 5,8k 2 9
1
Statt .Select(...) sollte da .Any(...) stehen, ansonsten passt's.
Daniel Kuppitz 25.03.2011
Danke :)
Mario Priebe 25.03.2011
0
Mal davon ausgehend dass das da oben C# ist, würde ich dir LINQ empfehlen. Zum Beispiel mit folgendem Codeschnipsel:
List<Mitarbeiter> allMitarbeiter = new List<Mitarbeiter>();
var query = from m in allMitarbeiter
where (from r in m.Regionen where r.Name == "Berlin" select r).Count() > 0
where (from t in m.Themenbereiche where t.Name == "Brandschutz" select t).Count() > 0
select m;

foreach (var mitarbeiter in query)
{
//wasauchimmer
}
24.03.2011
m.fuchs 1,6k 8
hmmm?
Mario Priebe 25.03.2011
Kannst du die Frage etwas genauer formulieren?
m.fuchs 25.03.2011

Stelle deine List-Frage jetzt!