1
我有一個HtmlElementCollection,我想使用LINQ獲得HTML元素,其ID中包含從另一個列表中的ID列表清單上HTML元素的列表。過濾基於局部IDS
所以我試了幾件事情沒有一個解決。我從集合中獲取一個列表並嘗試對其進行過濾。
這是部分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循環。
任何想法?
謝謝,它工作完美。解析網絡元素,以避免一個NullReferenceException的目的,我加了一個條件,使我的完整說法是: VAR elems的= doc.All.Cast()。凡(X => ids.Any(ID =>(X。 Id!= null)&&(x.Id.Contains(id))))。ToList(); –
您可以通過先前移動空檢查(大列表)來提高性能......'doc.All.Case().Where(x => x.Id!= null).Where(x => id .Any(id => x.Id.Contains(id)))'。或者只是將空檢查移到「Any」呼叫之前,這也會起作用 –
我之前做過這個,但認爲這會因爲兩次調用而變得更糟。但我想先縮小名單會是理想的嗎? –