C#방법은 받아들이는 조건자-이 보 ok?
-
18-09-2019 - |
문제
내가 좋아하는 메소드는 다음과 같은 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,네임스페이스 시스템)가 있습니다.
제휴하지 않습니다 StackOverflow