2010-07-19 4 views
1

나는 클래스가 FullName에 입력 단어가 있습니다. 일치하는 레코드가 있으면 코드 전과 후에 전체 이름을 정렬합니다.목록에 정렬 ​​및 필터링을 결합 도와

예 : "BC"목록을 반환 : 사용자 입력 문자열 때

사용자 입력 문자열 때

Code FullName 
"ABC" "The abc company" 
"BBC" "The bbc company" 

는 "PA"는이 목록을 반환 ("PA" 부되어 있습니다 처음에는 코드가 표시됩니다.) :

Code FullName 
"CPA" "The cpa company" 
"ABC" "The abc company" 
"BBC" "The bbc company" 

설명 : 코드 필드는 FullName 필드보다 우선 순위가 높습니다. 모든 레코드에는 문자열 "pa"가 있지만 코드 "CPA"가있는 레코드 만 "pa"를 포함하므로 위의 값을 가져야합니다.

추신 : 저는 .NET 2.0/C# 2.0을 사용하고 있습니다. 필터링에서 문자열 비교는 대소 문자를 구분하지 않습니다.

+2

이 답변은 .NET 2.0에없는 linq를 사용합니다. –

+2

'public int FullName'은'public string FullName'을 읽지 않아야합니까? –

+0

마지막 예에서'CPA'는'ABC'와'BBC' 전에 어떻게 분류됩니까? 'PA'가 발견 되었기 때문입니까? – Kobi

답변

2

내가 다음에 할 거라고 :

  1. 기업의 배열 모든 회사를 통해
  2. 으로 반복
  3. 시험과 동일한 길이가 정수 배열을 만드는이 회사 코드 있는지 사용자 입력으로 시작하고, 그렇다면 1000을 현재 색인의 int 배열에 추가합니다.
  4. 회사 코드에 사용자 입력이 있는지 테스트하고, 그렇다면 100을 현재 색인의 int 배열에 추가하십시오.
  5. 회사 전체 이름에 사용자 입력이 들어 있는지 테스트하고 예인 경우 10을 입력하십시오. 현재의 인덱스의 int 배열
  6. 종류의 키
  7. 반환 정렬 된 배열에서 첫 번째 N 결과, 또는 모든 결과로 int 배열을 사용하여 회사의 배열 (I 7 별개의 matchings을 가진 결국 내 문자열 검색 시스템에서 추가 검사를 추가) 또는 키이 같은 0보다 큰
0

어쩌면 뭔가를 모든 결과 :

var filtered = myObjList.Where(p=> p.Code.Contains(searchTerm) || p.FullName.Contains(searchTerm)) 

var sorted = filtered.OrderBy(p=> p.Code.StartsWith(searchTerm) ? 1 : 0).ThenBy(p=> p.FullName.StartsWith(searchTerm) ? 1 : 0) 

그것은 단순한,하지만 당신은 당신이 원하는 결과를 얻을 수 그것으로 재생할 수 있습니다.

+1

음, OP는 그가 C# 2.0에 있다고 했으므로 linq도 lambdas도 없습니다. 또한 람다는'->'이 아니라'=>'로 작성됩니다. 그러나 좋은 생각입니다. 비슷한 점을 생각해보십시오. 더미 값을 추가하여 정렬 할 수 있습니다. – Kobi

관련 문제