2013-04-30 2 views
2

선택 목록에서 값을 기반으로 단순화 된 선택 목록Linq에 약간 복잡한 selectList의 다음

<select name="stuff"> 
    <option value="">All</option> 
    <option>Test</option> 
    <option>Test1</option> 
    <option>Test2</option> 
    <option>Horses</option> 
</select> 

가 함께 작동하도록, 내 테이블에서 관련 값을 찾을 싶습니다.

LINQ

1. someTable.Where(r => r.someField.Contains(stuff)); 
2. someTable.Where(r => r.someField == stuff); 

3. var a = someTable; 
if(stuff != null) 
a = a.Where(r => r.someField.Contains(stuff)) 

"모든"옵션을 선택하면 전자 솔루션이 제대로 작동합니다. 모든 문자가 빈 문자열 으로 표시되므로 .Contains은 모든 경우에 true를 반환합니다. 테스트를 선택할 때 내가 원하는 경우도 모든를 제외한 모든 경우에 잘 작동합니다 Test1을Test2를

두 번째 솔루션 (==)을 반환하며, 휴식 것입니다 이것은, 나누기 다중 선택 목록에 사용하십시오.

세 번째 솔루션은 제대로 모든을 처리합니다,하지만 여전히 선택 테스트 경우 Test1을Test2를 반환합니다.

All, 복수 선택 및 정확한 값만 선택하도록이 코드를 어떻게 수정할 수 있습니까?

+0

세 번째 솔루션에 대해 'r.someField == stuff'을 사용하지 않는 이유는 무엇입니까? 잘못된 동작을하는 경우 처음에는'.Contains'를 사용하는 이유가 혼란 스럽습니다. – mellamokb

+0

@mellamokb 세 번째 해결 방법에서'=='를 사용하면 다중 선택이없는 경우에만 작동합니다. 나는 다중 선택을 위해 어떻게 깨지는지에 관해서는 제 2의 해결책을 끝냈다. 나는 그것을 조금 더 명백하게해야했다. – Jeff

답변

4

어떤 식 으로든 특별한 경우이므로 "All"을 다루기 위해 특별한 경우를 추가해야합니다. 예를 들어, 다음과 같이 두 번째 솔루션을 다시 작성할 수 있습니다.

someTable.Where(r => string.Empty == stuff || r.someField == stuff); 
+1

+1 기술적으로'r => stuff == ""|| ... ' – mellamokb

+0

@mellamokb 아, 네 말이 맞아, 그 값이'string.Empty' 인 동안'All'은 표시 이름이다. 고마워요! – dasblinkenlight

+0

그런 명백한 해결책! 나는 심지어 월요일에 그것에 대한 나의 감독을 비난 할 수 없다! 그 화요일 날. – Jeff