【发布时间】:2011-02-21 19:40:57
【问题描述】:
我有一个类型的对象集合,我想将它们转换为不同的类型。这可以通过 foreach 轻松完成,但我想弄清楚如何使用 Linq 的聚合函数来做到这一点。
问题是所有聚合示例都使用行字符串或整数类型,它们支持“+”运算符。我想让累加器类型是一个列表,它不支持“+”语义。
这是一个简单的例子:
public class DestinationType
{
public DestinationType(int A, int B, int C) { ... }
}
var set = from item in context.Items
select new { item.A, item.B, item.C };
var newSet = set.Aggregate( new List<DestinationType>(),
(list, item) => list.Add(new DestinationType(item.A, item.B, item.C)) );
问题在于 List.Add 返回 void。 Aggregate 的第二个参数的返回类型需要是 List。
如果我有一个支持“+”类型语义的列表类型,我可以只做第二个参数
list + item
但是我找不到任何支持这种东西的集合类型。
似乎这在 Linq 中应该很容易实现。有办法吗?另外,如果我错过了一个更简单的方法,我也很想了解这一点。谢谢!
【问题讨论】:
-
感谢您的所有精彩回答! Sam & Talljoe 的回答最简单地使用 Linq 完成了这一点。再次感谢!