C# LINQ的Zip函数对应的查询表达式等效写法是什么
问题原因
你写的双重from子句属于LINQ的复合查询,默认就是生成两个序列的笛卡尔积,也就是所有元素的两两组合,和你要的按位置配对逻辑完全不符,出现这个结果是正常行为。
实现方案
LINQ查询表达式本身没有直接对应Zip方法的语法糖,要实现相同的按位置匹配效果,需要先给两个序列的元素都绑定自身的索引,再按索引等值关联即可,示例代码如下:
var res = from e1WithIndex in lines1.Select((e1, idx) => new { e1, idx }) where !string.IsNullOrWhiteSpace(e1WithIndex.e1) join e2WithIndex in lines2.Select((e2, idx) => new { e2, idx }) on e1WithIndex.idx equals e2WithIndex.idx where !string.IsNullOrWhiteSpace(e2WithIndex.e2) select $"{e1WithIndex.e1} {e2WithIndex.e2}";
注意事项
这个写法的行为和内置Zip方法完全一致:如果两个输入序列长度不同,最终结果的长度取两个序列的较小值,超出长度的元素会被自动忽略。
内容的提问来源于stack exchange,提问作者Jan Bodnar
相关产品推荐
相关产品推荐

