作为我在上一个问题的后续跟进: Filtering a list of HtmlElements based on a list of partial ids
我需要接受这个声明:
doc.All.Cast<HtmlElement>()
.Where(x => x.Id != null)
.Where(x => ids
.Any(id => x.Id.Contains(id))).ToList();
并将其与一个名为fields的字符串数组连接起来。假设数组和列表每个元素的数量相同,并且正确排列。我尝试使用Zip(),但我认为我可能需要使用额外的linq语句来使其工作。
答案 0 :(得分:1)
假设fieldList[0]
和IdList[0]
相互对应,您可以执行以下操作:
var IdList = doc.All.Cast<HtmlElement>()
.Where(x => x.Id != null)
.Where(x => ids
.Any(id => x.Id.Contains(id))).ToList();
var resultList = fieldList
.Select( (item, index) => new { Field = item, Id = IdList[index] })
.ToDictionary(x => x.Id, x => x.Field);
答案 1 :(得分:0)
您已经提到过,可以使用Enumerable.Join
:
var joined = from id in fields
join ele in elements on id equals ele.Id
select new { Element = ele, ID = id };
var dict = joined.ToDictionary(x => x.ID, x => x.Element);
我假设你想通过ID加入他们。我还假设string[]
只包含唯一的ID。否则,您需要使用Distinct
。