我有一个HtmlElementCollection,我想使用Linq获取一个HtmlElements列表,其中id包含来自另一个列表的id。
所以我尝试了一些没有成功的事情。我从集合中获取一个列表并尝试过滤它。
这是部分ID的列表。元素ID是不同的,它们具有与此列表对应的ID以及一些随机看似的数字。
string[] ids = {"btadminh_struct.description",
"thtmlb_textView_6",
"thtmlb_textView_7",
"btadminh_struct.object_id",
"thtmlb_textView_12",
"zbtsalesset_struct.po_number_sold",
"thtmlb_textView_17",
"thtmlb_textView_21",
"thtmlb_textView_24",
"btcustomerh_z_followupdate",
"thtmlb_textView_29",
"btrefobjmain_ibibase",
"btrefobjmain_ibinstancedesc",
"btpartnerserviceto_struct.description_name",
"btpartnerset_contact_name",
"zzericempresp_struct.partner_no",
"zbtcsrowner_struct.partner_no",
"btcustomerh_struct.zcomments",
"thtmlb_textView_19",
"btadminh_servicecontractdescr",
"btcustomerh_zcontracttype_descr",
"btrefobjmain_network_id",
"btrefobjmain_node_id",
"btrefobjmain_site_id"};
元素ID看起来像这样:
"C29_W87_V88_btrefobjmain_network_instance",
"C29_W87_V88_btrefobjmain_network_id__items",
"C29_W87_V88_btrefobjmain_network_id",
"C29_W87_V88_btrefobjmain_network_id-btn",
"C29_W87_V88_btrefobjmain_network_id__key",
"C29_W87_V88_thtmlb_label_2",
"C29_W87_V88_btrefobjmain_service_id__items",
"C29_W87_V88_btrefobjmain_service_id",
"C29_W87_V88_btrefobjmain_service_id-btn",
"C29_W87_V88_btrefobjmain_service_id__key",
"C29_W87_V88_thtmlb_label_3",
"C29_W87_V88_btrefobjmain_networkadap_id__items",
"C29_W87_V88_btrefobjmain_networkadap_id",
"C29_W87_V88_btrefobjmain_networkadap_id-btn",
"C29_W87_V88_btrefobjmain_networkadap_id__key",
所以我把我的收藏放到了我可以查询的列表中。
var elems = doc.All.Cast<HtmlElement>();
我尝试了不同的方法,其中没有一种方法很有效。我也想使用Linq并避免使用丑陋的2-D foreach循环。
有什么想法吗?
答案 0 :(得分:2)
类似于elems.Where(x => ids.Any(id => x.ID.Contains(id)))
这样做是通过elems(你的html元素列表)中的每个项目,然后遍历你的id集合中的每个id,如果有任何匹配,那么它将返回该元素。