根据部分ID列表过滤HtmlElements列表

时间:2014-02-13 18:45:07

标签: c# linq filtering

我有一个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循环。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

类似于elems.Where(x => ids.Any(id => x.ID.Contains(id)))

这样做是通过elems(你的html元素列表)中的每个项目,然后遍历你的id集合中的每个id,如果有任何匹配,那么它将返回该元素。