У меня есть HtmlElementCollection, и я хочу использовать Linq для получения списка HtmlElements, идентификаторы которого содержат идентификатор из другого списка.Фильтрация списка HtmlElements на основе списка частичных идентификаторов
Итак, я пробовал пару вещей, которые не были разработаны. Я получаю список из коллекции и пытаюсь ее фильтровать.
Это список частичных идентификаторов. Идентификаторы элементов различны, и они имеют идентификаторы, соответствующие этому списку плюс некоторые случайные числа в начале.
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"};
идентификаторы элементы выглядят следующим образом:
"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 и избегать уродливого двухмерного цикла foreach.
Любые идеи?
Спасибо, он работал отлично. Для того, чтобы анализировать веб-элементы, чтобы исключить исключение NullReferenceException, я добавил условие, поэтому мой полный оператор: var elems = doc.All.Cast() .Where (x => ids.Any (id => (x. Id! = Null) && (x.Id.Contains (id)))). ToList(); –
Вы можете улучшить производительность, перемещая нулевую проверку раньше (в больших списках) ... 'doc.All.Case() .Where (x => x.Id! = Null). Где (x => ids .Any (id => x.Id.Contains (id))). Или просто переместите нулевую проверку перед вызовом 'Any', и это тоже будет работать –
Я сделал это раньше, но думал, что будет хуже из-за вызова где дважды. Но, судя по всему, сужение списка было бы идеальным? –