How to pass a Lambda Expression as method parameter with EF
- by Registered User
How do I pass an EF expression as a method argument?
To illustrate my question I have created a pseudo code example:
The first example is my method today. The example utilizes EF and a Fancy Retry Logic.
What I need to do is to encapsulate the Fancy Retry Logic so that it becomes more generic and does not duplicate.
In the second example is how I want it to be, with a helper method that accepts the EF expression as an argument.
This would be a trivial thing to do with SQL, but I want to do it with EF so that I can benefit from the strongly typed objects.   
First Example:
public static User GetUser(String userEmail)
{
    using (MyEntities dataModel = new MyEntities ())
    {
        var query =  FancyRetryLogic(() =>
        {
            (dataModel.Users.FirstOrDefault<User>(x => x.UserEmail == userEmail)));
        });
        return query;
    }
}
Second Example:
T RetryHelper<T>(Expression<Func<T, TValue>> expression)
{
    using (MyEntities dataModel = new (MyEntities ())
    {
        var query = FancyRetryLogic(() =>
                    {
                        return dataModel.expression
                    });
    }
}
public User GetUser(String userEmail)
{
    return RetryHelper<User>(<User>.FirstOrDefault<User>(x => x.UserEmail == userEmail))
}