2011-08-23 6 views
1

LINQ Where 절에서 일부 동작이 발생합니다.LINQ Where 절 오해

예를 들어 AND 의미를 사용하여 용어 목록을 검색하려고합니다.

var items = new List<string>() 
{ 
    "beef", 
    "beef soup", 
    "beef ribs", 
    "chicken soup", 
    "soup", 
    "pork ribs", 
    "ribs" 
}; 

var term = "soup beef"; 
var terms = term.Split(' '); 
var result = items.AsQueryable(); 
foreach(var t in terms) 
{ 
    result = result.Where(i => i.Contains(t)); 
} 
result.ToList().Dump(); 

결과

은 다음과 같습니다 : 여기

일부 코드

  • 쇠고기 쇠고기
  • 수프
  • 쇠고기 갈비 그러나

, 나는 그것을 찾고 있었다 AND 결과로 돌아 오는 중 :

  • 쇠고기 수프 이제

, 단순히 Where 절의 끝 부분에

.ToList().AsQueryable()

을 추가하여 내가 원하는 결과를 얻을 수 있습니다.

물론 이것은 백엔드가 데이터베이스 인 경우 수행하고 싶은 작업이 아닙니다. > 의미가 있습니다 -

  1. 첫 where 절 => 전체 목록하기 전에 : 여기 정말 이상한 무엇

    내가 루프 '결과'를 확인할 때, 나는 다음과 같은 얻을 수 있다는 것입니다.

  2. 첫 번째 다음 ('수프') => [ '쇠고기 수프', '치킨 수프', '수프'] -> 여전히 좋아 보이는 것
  3. 두 번째 루프 ('쇠고기') => [ 쇠고기 ','쇠고기 수프 ','쇠고기 갈비 '] -> 와우! 무슨 일이지 여기
  4. 초 루프 후 => 유지 같은

누군가가 벌어지고 (어떻게 제대로이 문제를 해결하기 위해) 무엇을 나에게 설명 할 수 있습니까? 수정 된 폐쇄

+0

귀하의 질문은 종종 요청합니다, 당신은 이미 루프 변수를 통해 폐쇄로 인해입니다 발견했습니다. 참조 : http://blogs.msdn.com/b/ericlippert/archive/2009/11/12/closing-over-the-loop-variable-considered-harmful.aspx 그들은 [ C# 5] (http : // stackoverflow.com/questions/7123898/lambda-capture-it-iterators/7124236 # 7124236). –

+0

확인되었습니다. 그들은 C# 5에서 큰 변화를 만들고 있습니다. 이것은'foreach' 루프를'for' 루프와 완전히 다르게합니다. –

답변

0

CLOSURES !!! Arg .... 알았어. 임의성 죄송

var cTerm = t; 

    result = result.Where(i => i.Contains(cTerm)); 

은 ...