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()
을 추가하여 내가 원하는 결과를 얻을 수 있습니다.
물론 이것은 백엔드가 데이터베이스 인 경우 수행하고 싶은 작업이 아닙니다. > 의미가 있습니다 -
- 첫 where 절 => 전체 목록하기 전에 : 여기 정말 이상한 무엇
내가 루프 '결과'를 확인할 때, 나는 다음과 같은 얻을 수 있다는 것입니다.
- 첫 번째 다음 ('수프') => [ '쇠고기 수프', '치킨 수프', '수프'] -> 여전히 좋아 보이는 것
- 두 번째 루프 ('쇠고기') => [ 쇠고기 ','쇠고기 수프 ','쇠고기 갈비 '] -> 와우! 무슨 일이지 여기
- 초 루프 후 => 유지 같은
누군가가 벌어지고 (어떻게 제대로이 문제를 해결하기 위해) 무엇을 나에게 설명 할 수 있습니까? 수정 된 폐쇄
귀하의 질문은 종종 요청합니다, 당신은 이미 루프 변수를 통해 폐쇄로 인해입니다 발견했습니다. 참조 : 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). –
확인되었습니다. 그들은 C# 5에서 큰 변화를 만들고 있습니다. 이것은'foreach' 루프를'for' 루프와 완전히 다르게합니다. –