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

时间:2011-03-03 04:41:43

标签: linq c#-4.0 datacontext func

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

传递这个是否安全:

return WithRetry<User>(() => 
   dataContext.Users.Where(u => u.UserID == userID).SingleOrDefault());

到此:

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

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

return WithRetry<User>(() => 
{ 
     return dataContext.Users
                       .Where(u => u.UserID == userID)
                       .SingleOrDefault(); 
});

2 个答案:

答案 0 :(得分:3)

不需要匿名包装器。只需直接传递lambda表达式函数调用。

答案 1 :(得分:2)

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