将Linq和.ToList(),. Single()等作为func参数传递给另一个方法是否安全?

Vyr*_*tek 5 linq datacontext func c#-4.0

我需要用一些重试策略逻辑包装一些Linq查询.

传递这个是安全的:

return WithRetry<User>(() => 
   dataContext.Users.Where(u => u.UserID == userID).SingleOrDefault());
Run Code Online (Sandbox Code Playgroud)

对此:

public TResult WithRetry<TResult>(Func<TResult> methodCall)
{ 
   // My Try/Catch Retry Code
}
Run Code Online (Sandbox Code Playgroud)

或者第一行应该像这样构造:

return WithRetry<User>(() => 
{ 
     return dataContext.Users
                       .Where(u => u.UserID == userID)
                       .SingleOrDefault(); 
});
Run Code Online (Sandbox Code Playgroud)

mel*_*okb 2

AFAIK,如果方法的参数类型是Func,调用它会自动作为函数传递而不执行它。您不需要将其进一步包装在匿名函数包装器中。