Report abuse


			
public class RepositoryMetaObject : MetaObject
{
    protected T _Repository;

    public RepositoryMetaObject(T repository, Expression param)
        : base(param, Restrictions.Empty)
    {
        _Repository = repository;
    }

    public override MetaObject Call(CallAction action, MetaObject[] args)
    {
        typeof(T).GetMethod(action.Name).Invoke(_Repository, getParameterArray(args));
        return this;            
    }

    private object[] getParameterArray(MetaObject[] args)
    {
        List objects = new List();
        foreach (var item in args)
        {
            if (!(item is RepositoryMetaObject))
                objects.Add(item.Value);
        }
        return objects.ToArray();
    }
}