Универсальный метод с лямбда-критериями в Business Objects Collection - PullRequest
1 голос
/ 07 мая 2009

В моем приложении есть абстрактный класс для каждого бизнес-объекта ( BO ) Также есть родительская (универсальная) коллекция для хранения всех BO (с именем BOC - Business Object Collection)

То, что я хотел бы архивировать, создано универсальным методом iniside BOC, похожим на:

public  T GetBusinessObject (lambda_criteria)

Так что я мог бы назвать этот метод похожим на:

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

И метод должен возвращать BO, отвечающий указанным лямбда-критериям

Какие-нибудь советы, как архивировать это?

Ответы [ 3 ]

1 голос
/ 07 мая 2009

Что-то вроде

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

и затем называется как

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

возможно

1 голос
/ 07 мая 2009

Если это общая коллекция, то вызывающая сторона должна уже (через LINQ) иметь возможность использовать:

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);

что делать?

1 голос
/ 07 мая 2009

Если предположить, что ваш BOC наследует или использует общий список внутри, это не слишком сложно:

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