2016-10-28 1 views
2

나는이 라인이 null이 아닐 때 더 SubCategoryName이 없을 때까지, 괜찮LINQ 조건 경우에만 소품이

products = products.Where(p => p.Brand.Equals(s) || 
           p.CatCodeNaam.Equals(s) || 
           p.SubCategoryName.Equals(s)).ToList(); 

합니다.

var t = products.Where(p => p.Brand.Equals(s) || 
          p.CatCodeNaam.Equals(s)) 
       .Where(p => !string.IsNullOrWhiteSpace(p.SubCategoryName) && p.SubCategoryName.Equals(s)); 

을하지만 아무도 SubCategoryName가없는 경우, 그냥 무시해야하고 그래서 하늘의 콜렉션을 필터링하지 않습니다

그래서 나는 시도했다.

빈 문자열 isnull(SubCategoryName,'') as SubCategoryName을 반환하는 데이터베이스를 사용하여 문제를 해결할 수 있음을 알고 있지만 필요하지 않습니다. LINQ 수정을 찾고 있습니다. 내가 좋아하는 키워드 배열이

:

"car", "ford", "focus" 

을 그리고 나는 foreach와 키워드 배열을 반복

일부 테스트 데이터는 내 문제를 설명합니다.

키워드가 브랜드, 카테고리 또는 하위 카테고리인지 여부는 알지 못하므로이 키워드가 해당 키워드인지 확인해야합니다. 그러나 데이터 집합에 products의 하위 범주에 null 값이있는 개체가있어 첫 번째 줄이 충돌합니다.

+0

왜 빈 컬렉션이 반환되기를 원하지 않습니까? 그 대신에 무엇을 돌려주고 싶니? 왜 이것을 빈 컬렉션보다 좋다고 생각하니? –

+2

간단한 제안 : 조건을 역순 :'s.Equals (p.SubCategoryName)' –

+0

@ManfredRadlwimmer 그게 다예요. 나는 그것이 단순한 무엇인가 알고 있었다! #friday 답변으로 표시하여 응답하도록 표시 할 수 있습니까? –

답변

3
이 조건을 역

p.SubCategoryName이 null입니다.

1

내가 제대로 이해하지 않은 경우 미안하지만 이런 식으로 작동하지 않을 :

s.Equals(p.SubCategoryName) 

이 경우 문제가되지 않습니다 그런 식 :

products = products.Where(p => p.Brand.Equals(s) || 
           p.CatCodeNaam.Equals(s) || 
           p.SubCategoryName == null || 
           p.SubCategoryName.Equals(s)).ToList(); 
+0

그는 또한 @ Farhad Jabiyev가 제안한대로 그가 묘사 한 것입니다. 매우 이상하게 들리 겠지만, "SubCategoryName이 NULL이거나 Brand, CatCodeNaam, SubCategoryName 필드 중 하나에 문자열이있는 모든 것들을 선택하고 싶습니까? 다음 나는 또한 이렇게 할 것입니다, p.SubCategoryName == null을 첫 번째 검사로 넣으십시오. –

+0

@CetinBasoz 그것은 [this] (http://meta.stackoverflow.com/questions/254341/a-car-with-square-wheels)를 기억합니다. – meJustAndrew