我想要以更易读的方式压缩多个序列,以便我可以写
a.Zip(b)
在查询语法中为
From a in Foo1
Join b in Foo2
没有结果是交叉连接
或
From a in Foo1
Zip b in Foo2
答案 0 :(得分:3)
标准Zip
方法允许您编写类似(使用C#)的内容:
from t in first.Zip(second, (f, s) => new { First = f, Second = s }
select ... t.First ... t.Second;
我认为这应该足够可读。您的问题似乎表明您希望能够创建自己的关键字,例如zip
并使用它扩展C#查询表达式。这在C#或Visual Basic中是不可能的(但我同意它在某种程度上会很好)。
通过一些努力,您可以重新定义标准C#查询构造的功能,以便join
的行为类似于zip
(在这种情况下,equals
不需要部分查询,因此你会有很多语法噪音)。可能,您还可以重新定义from
条款。我没有尝试过,但我相信你可以得到类似的东西:
from f in first.Zip()
from s in second.AddToZip()
from t in second.AddToZip()
select ... f ... s ... t ...;
我写了一篇文章,介绍如何为group by
子句(Using custom grouping operator in LINQ)执行重新定义,这样可以让您了解如何做到这一点。
(但老实说,我认为标准Zip
方法应该没问题。运算符的重新定义非常微妙。group by
示例可能更具吸引力,因为使用方法分组更加丑陋,甚至在边缘......)