문제

내가 좋아하는 메소드는 다음과 같은 API:

//get all users with a role of admin
var users = myRepository.GetUsers(u => u.Role == Role.Admin);

이 같은 것이 일하는가?

IList<User> GetUsers(Func<User, bool> predicate)
{            
  var users = GetAllUsers();
  return users.Where(predicate).ToList();                                                          
} 

그렇다면,wil 나를 지정할 수 있는 더 복잡한 조건자와 같은(의사):

myRepository.GetUsers(u => u.CreatedDate is upto 14 days old);
도움이 되었습니까?

해결책

그것은 절대적으로 괜찮아 보입니다. 그러나 LINQ에서 SQL과 같은 술어를 사용하려면 다음을 사용하고 싶을 것입니다.

IList<User> GetUsers(Expression<Func<User, bool>> predicate)

즉, Lambda 발현은 대의원 대신 발현 트리로 변환 될 것이며, 그 표현식 트리는 SQL로 변환 될 수 있습니다.

다른 팁

예, 이것은 작동합니다.

컴파일러가 말하는 것은 User 물체를 반환합니다 bool - 기능의 모습은 전적으로 귀하에게 달려 있습니다. ors를 사용하여 꽤 복잡한 둥지 물건을 얻을 수 있습니다.||) 및 ands (&&)) 그러나 술어가 무엇을하는지보기가 너무 어려워지면 리팩토링을 고려해야합니다.

그러나 기본적으로 예를 들어 모든 람다 u A로 User 물체, 그리고 그것을 반환하는 표현으로 바꿉니다. bool 작동합니다.

One tip:당신이 사용할 수 있는 조건자<T> 대신 Func<T, bool="">는 조금 더 명확한(조건자<T> 내장되어 있습니다.net3.5,네임스페이스 시스템)가 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top