У меня есть несколько методов, которые выполняют стандартный фильтр данных из моих сущностей (используя Entity Framework v4).
Пример № 1:
protected IQueryable<Database.Product> GetActiveProducts( ObjectSet<Database.Product> products ) {
var allowedStates = new string[] { "Active" , "Pending" };
return (
from product in products
where allowedStates.Contains( product.State )
&& product.Hidden == "No"
select product
);
}
Пример № 2:
protected IQueryable<Database.Customer> GetActiveProducts( ObjectSet<Database.Customer> customers ) {
var allowedStates = new string[] { "Active" , "Pending" };
return (
from customer in customers
where allowedStates.Contains( customer.State )
&& customer.Hidden == "No"
select customer
);
}
Как видите, эти методы идентичны, за исключением типов сущностей, с которыми они работают. У меня есть более 10 таких методов, по одному для каждого типа сущностей в моей системе.
Я пытаюсь понять, как у меня может быть 1 единственный метод, для которого я могу передать любой тип сущности, и заставить его выполнить предложение where, если существуют 2 поля / свойства.
Я не использую Inheritance в базе данных, поэтому, что касается системы, то случайно, что каждый из типов Entity имеет поля «Hidden» и «State».
Мой Googling говорит мне, что это как-то связано со сборкой кода с использованием Expression.Call (), но моя голова вращается!