2009-05-07 7 views
1

Je classe abstraite pour chaque Business Object dans mon application (BO) ont également la collection parent (générique) pour stocker tous BOs (nom BOC - Collection Business Object)méthode universelle avec les critères de lambda à Business Objects Collection

ce que je voudrais archive est créée méthode universelle iniside BOC similaire à:

public T GetBusinessObject (lambda_criteria) 

Je pourrais appeler cette méthode similaire à:

Employee emp = BOC.GetBusinessObject(Employee.ID=123) 

et méthode retournerez rencontrent des critères BO lambda spécifiés

Des conseils comment archiver cela?

Répondre

1

En supposant que votre BOC hérite de ou utilise une liste générique interne, il est pas trop difficile:

T GetBusinesObject<T>(Func<T, bool> predicate) 
{ 
    return this.FirstOrDefault(predicate); 
} 
+0

Je ne suis pas sûr que ce serait une méthode générique - et si c'est le cas, vous voudriez sûrement un 'OfType' /' GetTable'/quelque chose? Peut-être perdre le ''? –

1

Quelque chose comme

T GetBusinessObject<T>(Predicate<T> constraint) where T : BO 

puis appelé comme

GetBusinessObject<Employee>(e => e.ID = 123) 

peut-être?

+0

Merci. Mais comment sera le corps de la méthode proposée? – Maciej

1

Si cela est une collection générique, l'appelant doit déjà (via LINQ) pouvoir utiliser:

BOC<Employee> boc = ... 
// checks exactly 1 match, throws if no match 
var emp = boc.Single(e => e.ID = 123); 
// checks at most 1 match, null if no match 
var emp = boc.SingleOrDefault(e => e.ID = 123); 
// checks at least one match, throws if no match 
var emp = boc.First(e => e.ID = 123); 
// returns first match, null if no match 
var emp = boc.FirstOrDefault(e => e.ID = 123); 

que faire?

Questions connexes