2011-06-14 7 views
3

명확하게 설명해 드리겠습니다.술어 개체에서 중복을 제거하는 방법?

검색 문자열이없고 목록에 다른 입력란이 있습니다.

이제 한 번에 검색 문자열을 제공하지 않을 것입니다. 그러면 내 술어는 검색 스팅을 사용하여 목록의 모든 항목을 검색합니다.

일치 후 나는 하나의 술어 개체를 얻을 것이다.

검색의 다음 반복에 대해 다른 조건자를 얻습니다. 목록의 동일한 필드에서 검색하지 않기 때문에 목록에서 같은 항목 일 수 있습니다.

그래서 모든 조건부 객체를받은 후 결합하여 하나의 객체에 할당합니다.

하지만 예외가 발생합니다.

string[] separator = new string[] { "+" }; 
     string[] searchItems = s.Split(separator, StringSplitOptions.None); 
     foreach (string str in searchItems) 
         { 
           _defaultPredicate = _defaultPredicate.And(e =>    

           e.Name.ToLower().Contains(str) ||            

           e.Lname.ToLower().Contains(str) ||  

           e.Job.ToLower().Contains(str)); 

           Predicates.Add(_defaultPredicate);//predicates is a list 
         } 

      foreach (Expression<Func<Alert, bool>> Predicate in Predicates) 
         { 
          _currentPredicate = _currentPredicate.Or(Predicate); 
          _currentPredicate.Compile();//Here its giving an exception        

          // "an item with the same key has already been added". 
         } 

무엇을할까요? 중복 된 값을 제거하려면 어떻게해야합니까?

+0

짧지 만 완전한 * 예제가 도움이된다고 생각합니다. 현재 그 의미가 무엇인지는 분명하지 않습니다. "in"체크 만 원하면'Contains'를 사용하지 않는 이유가 무엇입니까? –

+0

정확한 일치를 원하지 않기 때문입니다. 목록에 문자열이 포함되어 있으면 문자열이 표시되어야합니다. – Sowmya

+0

하지만 그게'x => list.Contains (x)'가하는 일입니다. 다시 한 번 완전한 예를 들어 보면이 사실이 더 명확해질 수 있습니다. –

답변

0
foreach (Expression<Func<Alert, bool>> Predicate in Predicates.Distinct())  
    { 
     _currentPredicate = _currentPredicate.Or(Predicate); 
     _currentPredicate.Compile();  
    } 

귀하의 조건부 목록을 고유하게 만듭니다.

관련 문제