我有一个项目,我试图将其转换为F#,其中包含大量的linq-to-IEnumerable样式查询。我很好奇在F#中执行多个列表的连接的最佳方式是什么。例如,如果我有一堆C#代码,如以下``
`
var joinedList =
from val1 in list1
join val2 in list2 on val1.Key equals val2.Parent
join val3 in list3 on val1.Key equals val3.Parent
orderby val1
select new {val1, val2, val3};
`
``将其转换为F#的最佳方法是什么?我将保留“最佳”的定义,但我正在寻找一些功能性的而不是命令性的东西,最好不要将我的列表转换为seq和/或导入System. Linq。懒惰和急切的解决方案都将是有用的。当然,可重用性是关键,因为我到处都有这样的查询。如果有任何方法可以使用工作流来使语法更优雅,那就太好了。
2条答案
按热度按时间jckbn6z71#
在Don关于LINQ和Powerpack的博客中:
Link
它展示了如何进行LINQ join调用。但当然这是在
seq
上使用LINQ。他还指出join类似于条件。所以我认为,例如,您的示例类似于虽然我还没有用真实的数据来验证。
mzaanser2#
第一次尝试在简化版本上使用管道(忽略
list3
):这将留下
IEnumerable<Tuple<T1,T2>>
。第二个collect和map将加入第三个列表