从LINQ查询返回多个流

时间:2009-06-09 11:53:11

标签: c# linq

我想写一个返回两个对象流的LINQ查询。在F#中,我会编写一个Seq表达式,它创建一个2元组的IEnumerable,然后运行Seq.unzip。在C#(在.NET 3.5上)执行此操作的正确机制是什么?

干杯,尤尔根

2 个答案:

答案 0 :(得分:3)

您最好的选择可能是创建Pair<T1, T2>类型并返回其序列。 (或者使用匿名类型来做同样的事情。)

然后你可以用以下方式“解压缩”:

var firstElements = pairs.Select(pair => pair.First);
var secondElements = pairs.Select(pair => pair.Second);

首先可能值得pairs实现(例如,在第一次查询结束时调用ToList()),以避免对查询进行两次评估。

基本上这与您的F#方法完全相同,但没有内置支持。

答案 1 :(得分:2)

由于C#中缺少元组,您可能会创建一个匿名类型。 对此的语义是:

someEnumerable.Select( inst => new { AnonTypeFirstStream = inst.FieldA, AnonTypeSecondStream = inst.FieldB });

这样你就不会受到返回的数据量的束缚,只需在匿名类型中添加一个字段,就像你可以向元组添加一个元素一样。