Создать FuncВо время выполнения - PullRequest
2 голосов
/ 18 февраля 2011

У меня есть два класса: Role и CustomRole

public class CustomRole
{
    public string RoleName { get; set; }
    public int RoleId { get; set; }
}

public class Role
{
    public string RoleName { get; set; }
    public int RoleId { get; set; }
    public int MyRole { get; set; }
}

во время компиляции у меня есть такой делегат:

Func<CustomRole, bool> Del = o => o.RoleId > 0;

Проблема во время выполнения, мне нужно создать еще одного делегата с таким же условием, но имя таблицы изменилось

Func<Role, bool> Del1 = o => o.RoleId > 0;

Как мне этого добиться?

Ответы [ 2 ]

3 голосов
/ 18 февраля 2011

Вы можете сделать так, чтобы и Role, и CustomRole реализовали интерфейс IRole, который включает в себя свойство RuleId, а затем заставили вашего делегата использовать IRole.

Если это не вариант, вы можете изучить утку.

2 голосов
/ 20 февраля 2011

Этого можно достичь, используя отражение, чтобы получить значение свойства:

Func<object, bool> del = o => (int)o.GetType().GetProperty("RoleId").GetValue(o, null) > 0;

Поскольку вы используете Entity Framework, вы, вероятно, можете сделать это также:

Func<EntityObject, bool> del = o => (int)o.GetType().GetProperty("RoleId").GetValue(o, null) > 0;
...