C# 将字符串数组与现有linq语句的结果联接

C# 将字符串数组与现有linq语句的结果联接,c#,arrays,linq,list,dictionary,C#,Arrays,Linq,List,Dictionary,作为我最后一个问题的后续: 我需要接受以下声明: doc.All.Cast<HtmlElement>() .Where(x => x.Id != null) .Where(x => ids .Any(id => x.Id.Contains(id))).ToList(); doc.All.Cast() .Where(x=>x.Id!=null) .其中(x=>ids .Any(id=>x.id.Contains(id))).ToLi

作为我最后一个问题的后续:

我需要接受以下声明:

doc.All.Cast<HtmlElement>()
    .Where(x => x.Id != null)
    .Where(x => ids
        .Any(id => x.Id.Contains(id))).ToList();
doc.All.Cast()
.Where(x=>x.Id!=null)
.其中(x=>ids
.Any(id=>x.id.Contains(id))).ToList();

并用一个名为fields的字符串数组连接它。假设数组和列表中的元素数量相同,并且正确排列。我尝试使用Zip(),但认为可能需要使用额外的linq语句才能使其工作。

您已经提到过,可以使用
可枚举。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加入它们。我还假定
字符串[]
只包含唯一的ID。否则,您需要使用
Distinct

假设
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);
var IdList=doc.All.Cast()
.Where(x=>x.Id!=null)
.其中(x=>ids
.Any(id=>x.id.Contains(id))).ToList();
var resultList=字段列表
.Select((项,索引)=>new{Field=item,Id=IdList[index]})
.ToDictionary(x=>x.Id,x=>x.Field);

那么你想要什么,自定义类型的
词典
还是
列表
?哎呀,很抱歉把它漏掉了。是的,我的目标是得到一本字典。看起来字段是一个
列表
不,我不想通过id加入它们。id不是很可读(你可以看到我提供的链接,了解它们的外观)。假设数组和列表中的元素数量相同,我尝试压缩它们,但无法使其工作。我只想让字符串数组成为字典的ID,每个HtmleElement的内部文本成为值。(希望更清楚)。@TimSchmelter不重要,仍然没有Id属性存在。因此当前查询生成一个列表,字段是字符串[]。有可能,这可以在一个linq语句中完成吗?因此,不要将第一条语句放入列表,而是使用ToDictionary(fields,x.InnerText),其中fields是字符串数组,x是HtmlElement。或者类似的东西?为什么选择
而不是简单的
邮政编码?