2011-03-03 8 views
5

Bazı Tekrar Sorgu İlkesi mantığıyla bazı Linq sorgularını kaydırmam gerekiyordu. Linq ve .ToList(), .Single(), vb. Bir func parametresi olarak başka bir yönteme geçmek güvenli midir?

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

Ya

ilk satırı artık şöyle inşa edilmelidir:

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

Dizinin burada nasıl yardımcı olduğundan emin değil misiniz? – mellamokb

+0

Bu bir dizi değil, son snippet, linq'i anonim bir işleve saracaktı (inanıyorum). – Vyrotek

+0

Ah, anlıyorum. Öndeki 'dönüşü 'yerleştirmelisin. Her iki durumda da testlerimde aynı türde ('System.Func \' 1 [User] ') var gibi görünüyorlar. – mellamokb

cevap

2

AFAIK, eğer buna

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

:

güvenli bu geçmesine mı Bir yöntemin argüman türü Func olup, çağrılmadan otomatik olarak bir işlev olarak geçecektir. Anonim bir işlev sarıcısına daha fazla sarmanıza gerek yoktur.

3

Anonim bir sarıcı gerekli değildir. Sadece lambda ifadesi işlev çağrısını doğrudan iletin.

İlgili konular