LINQ Donde Sintaxis

c# html-agility-pack linq

Pregunta

Tengo el siguiente enlace LINQ para completar una tabla de datos de html <tr> con la ayuda de HTMLAgilityPack, cada etiqueta tiene un atributo y innertext ignorar el texto innertext de esa etiqueta si el valor del atributo es "rating-col".

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));

sin la cláusula Where las cosas funcionan bien, ¿qué hago mal dentro de la cláusula Where ?

Respuesta aceptada

Parece que te faltaba un lambda y que uno de los Selects estaba fuera de servicio. Además, no había ninguna razón para ToList() o ForEach() aquí. Tu llamada ToList() hizo las cosas más lentas y te obligó a usar más memoria. La única razón por la que lo necesita es para obtener la extensión ForEach() , y eso realmente no le guarda nada aquí en un bucle foreach normal. Además, aunque no soy un experto en esa área, entiendo que la extensión ForEach() es un estilo funcional deficiente, porque casi asume que está causando efectos secundarios (un gran no funcional). Como linq está muy inspirado en el paradigma de la programación funcional, trato de prestar atención a tales cosas.

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);
}

Respuesta popular

Where(td.Attributes[0].Value != "rating-col")) debe tener un lambda en él ... como:

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



Related

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué