parse net convert c# .net linq .net-3.5

c# - net - linq parse int



Hacer un cast dentro de una consulta LINQ (5)

Dependiendo de lo que trates de hacer, uno de estos puede hacer el truco:

List<Line> parentLineList1 = (from t in content.ChildControls.OfType<TabSection>() from p in t.ChildControls.OfType<Paragraph>() from pl in p.ChildControls.OfType<Line>() select pl).ToList(); List<Line> parentLineList2 = (from TabSection t in content.ChildControls from Paragraph p in t.ChildControls from Line pl in p.ChildControls select pl).ToList();

Tenga en cuenta que uno usa OfType <T> (), que estaba usando. Esto filtrará los resultados y devolverá solo los elementos del tipo especificado. La segunda consulta usa implícitamente Cast <T> (), que arroja los resultados en el tipo especificado. Si no se puede lanzar ningún elemento, se lanza una excepción. Como mencionó Turbulent Intellect, debe abstenerse de llamar a ToList () el mayor tiempo posible, o tratar de evitarlo por completo.

¿Es posible hacer un molde dentro de una consulta LINQ (por el bien del compilador)?

El siguiente código no es terrible, pero sería bueno hacerlo en una consulta:

Content content = dataStore.RootControl as Controls.Content; List<TabSection> tabList = (from t in content.ChildControls select t).OfType<TabSection>().ToList(); List<Paragraph> paragraphList = (from t in tabList from p in t.ChildControls select p).OfType<Paragraph>().ToList(); List<Line> parentLineList = (from p in paragraphList from pl in p.ChildControls select pl).OfType<Line>().ToList();

El código continúa con algunas consultas más, pero la esencia es que tengo que crear una lista de cada consulta para que el compilador sepa que todos los objetos en content.ChildControls son de tipo TabSection y todos los objetos en t.ChildControls son del tipo Paragraph ... y así sucesivamente y así sucesivamente.

¿Hay alguna manera dentro de la consulta LINQ para decirle al compilador que t from t in content.ChildControls es una TabSection ?


Prueba esto:

from TabSection t in content.ChildControls

Además, incluso si esto no estuviera disponible (o para un escenario futuro diferente que pueda encontrar), no estaría restringido a convertir todo en Listas. La conversión a una lista provoca una evaluación de la consulta sobre el terreno. Pero si elimina la llamada a la lista, podría trabajar con el tipo IEnumerable, que continuaría difiriendo la ejecución de la consulta hasta que realmente itere o almacene en un contenedor real.


Y aquí está el formulario de método de consulta.

List<Line> parentLineList = content.ChildControls.OfType<TabSections>() .SelectMany(t => t.ChildControls.OfType<Paragraph>()) .SelectMany(p => p.ChildControls.OfType<Line>()) .ToList();


sí, puedes hacer lo siguiente:

List<TabSection> tabList = (from t in content.ChildControls where t as TabSection != null select t as TabSection).ToList();


List<TabSection> tabList = (from t in content.ChildControls let ts = t as TabSection where ts != null select ts).ToList();