2011-03-03 1 views
5

일부 재시도 정책 로직으로 일부 Linq 쿼리를 래핑해야했습니다. Linq와 .ToList(), .Single() 등을 다른 메소드에 func 매개 변수로 전달하는 것이 안전합니까?

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

또는

이 첫 번째 줄이 대신 같이 구성해야합니다 :

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

배열이 여기에서 어떻게 도움이되는지 잘 모르시겠습니까? – mellamokb

+0

그것은 배열이 아니므로 마지막 스 니펫은 linq을 익명 함수로 감쌀 것입니다 (저는 믿습니다). – Vyrotek

+0

아, 알겠습니다. 앞에'return'을 넣어야합니다. 어느 쪽이든, 그들은 내 테스트에서 같은 유형 ('System.Func \'1 [User]')을 가진 것처럼 보입니다. – mellamokb

답변

2

AFAIK의 경우이에

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

:

는 안전이 통과하는 것입니다 메소드의 인수 유형은 Func이며, 호출하지 않으면 함수를 호출하지 않고 자동으로 전달됩니다. 익명의 함수 래퍼에서 더 이상 래핑 할 필요가 없습니다.

3

익명의 래퍼는 필요하지 않습니다. 람다 표현식 함수 호출을 직접 전달하십시오.