我有:
IEnumerable<Foo> foolist
我希望你能将这个转换为:
IEnumerable<Bar> barlist
有没有一种LINQ / Lambda解决方案可以从一个对象移动到另一个对象?
这两个对象(foo和bar)都有简单的属性需要转换。例如:
bar.MyYear = foo.Year
它们每个都有大约6个属性。
我有:
IEnumerable<Foo> foolist
我希望你能将这个转换为:
IEnumerable<Bar> barlist
有没有一种LINQ / Lambda解决方案可以从一个对象移动到另一个对象?
这两个对象(foo和bar)都有简单的属性需要转换。例如:
bar.MyYear = foo.Year
它们每个都有大约6个属性。
你可以这样做:
IEnumerable<Bar> barlist = foolist.Select(
foo => new Bar(foo.Year)); // Add other construction requirements here...
Enumerable.Select实际上是一个投影函数,因此它非常适合类型转换。根据帮助文档:
将序列的每个元素投射到新表单中。
编辑:
由于Bar
没有构造函数(根据您的评论),因此您可以改用对象初始化器:
IEnumerable<Bar> barlist = foolist.Select(
foo => new Bar()
{
Year = foo.Year,
Month = foo.Month
// Add all other properties needed here...
});
就一般数据处理模式而言,我们正在寻找的是通用Map/Reduce范例的映射原则(如果您允许我打个双关语,这与LINQ中的Select
相对应,正如@Reed Copsey所举的很好的例子)。
AutoMapper是一个库,它在适用LINQ的环境中实现了基于约定的投影/映射,并且如果您有足够复杂的需求来引入另一个库的认知负荷,那么它可能值得您去研究。