是否可以在LINQ查询中进行转换(出于编译器的考虑)?
下面的代码并不可怕,但将它组合成一个查询会很好:
Content content = dataStore.RootControl as Controls.Content; ListtabList = (from t in content.ChildControls select t).OfType ().ToList(); List paragraphList = (from t in tabList from p in t.ChildControls select p).OfType ().ToList(); List parentLineList = (from p in paragraphList from pl in p.ChildControls select pl).OfType ().ToList();
代码继续进行一些查询,但要点是我必须从每个查询中创建一个List,以便编译器知道所有content.ChildControls
类型TabSection
的对象和所有类型的对象t.ChildControls
都是类型Paragraph
. ..等等等等.
在LINQ查询中是否有一种方法可以告诉编译器t
in ?from t in content.ChildControls
是TabSection
?
试试这个:
from TabSection t in content.ChildControls
此外,即使这不可用(或者您可能遇到的不同的未来场景),您也不会将所有内容转换为列表.转换为List会导致现场查询评估.但是如果删除ToList调用,则可以使用IEnumerable类型,这将继续推迟查询的执行,直到您实际迭代或存储在真实容器中.
根据您要做的事情,其中一个可能会做到这一点:
ListparentLineList1 = (from t in content.ChildControls.OfType () from p in t.ChildControls.OfType () from pl in p.ChildControls.OfType () select pl).ToList(); List parentLineList2 = (from TabSection t in content.ChildControls from Paragraph p in t.ChildControls from Line pl in p.ChildControls select pl).ToList();
请注意,您使用的是OfType