LINQ 구문 구문

c# html-agility-pack linq

문제

HTMLAgilityPack의 도움으로 html <tr> 태그에서 datatable을 채우기 위해 다음 LINQ를 작성했습니다. 각 태그는 하나의 속성을 가지고 있으며 속성 값이 "rating-col"인 경우 해당 태그의 innertext 를 무시해야합니다.

nodes.Skip(1)
.Select(
tr => tr.Elements("td").
    Select(td => td.InnerText.
        Where(td.Attributes[0].Value != "rating-col")).
        ToArray()).
        ToList().
        ForEach(row => dt.Rows.Add(row));

절 일들이 잘 작동 어디없이, 나는 내부에서 무슨 일을하고있는 중이 야 Where 절?

수락 된 답변

당신이 람다를 놓친 것처럼 보이고 선택 중 하나가 고장난 것 같습니다. 또한 여기에는 ToList() 또는 ForEach() 대한 이유가 없습니다. ToList() 호출을 사용하면 작업 속도가 느려지고 더 많은 메모리를 사용해야했습니다. 당신이 필요로하는 유일한 이유는 ForEach() 확장을 얻는 것이고 이것은 정상적인 foreach 루프를 통해 여기에 아무것도 저장하지 않는다는 것입니다. 게다가, 나는 그 분야의 전문가는 아니지만 ForEach() 확장은 부작용 (큰 기능적 no-no)을 일으키는 것으로 거의 가정하기 때문에 확장 기능이 좋지 않음을 이해해야합니다. linq는 기능 프로그래밍 패러다임에 크게 영향을 받았으므로 이러한 점에주의를 기울입니다.

foreach (var row in nodes.Skip(1)
     .Select(tr => tr.Elements("td")
         .Where(td => td.Attributes[0].Value != "rating-col")
         .Select(td => td.InnerText)
         .ToArray()))
{
    dt.Rows.Add(row);
}

인기 답변

Where(td.Attributes[0].Value != "rating-col")) 는 다음과 같이 람다를 가져야합니다.

Where(c => c.Attributes[0].Value != "rating-col"))




아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.