使用现有linq语句的结果加入一个字符串数组

时间:2014-03-04 15:11:25

标签: c# arrays linq list dictionary

作为我在上一个问题的后续跟进: 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语句来使其工作。

2 个答案:

答案 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