如何使用Linq将对象投影到列表中?

4

我经常需要在将对象发送到网络之前对它们进行精简。

背景:

Position是一个由基于我的表格的LINQ to SQL生成的重量级竞争者。它存储了大量的数据。

SPosition是一个轻量级对象,仅存储我的纬度和经度。

代码:

 List<SPosition> spositions = new List<SPosition>();
 foreach (var position in positions)  // positions = List<Position>
 {
    SPosition spos = new SPosition { latitude = position.Latitude, longitude = position.Longitude };
    spositions.Add(spos);
 }

 return spositions.SerializeToJson<List<SPosition>>();

我该如何使用一些LINQ魔法来简化这个过程?

5个回答

13
var spositions = positions.Select(
                     position => new SPosition
                         {
                             latitude = position.Latitude,
                             longitude = position.Longitude
                         }).ToList();

在结尾处添加“.ToList()”以返回List<SPosition>而不是IEnumerable<SPosition>。 - Steve G.

6
return positions
    .Select(x => new SPosition 
    { 
        latitude = x.Latitude, 
        longitude = x.Longitude 
    })
    .ToList()
    .SerializeToJson<List<SPosition>>();

0
positions.ForEach((p) => {spositions.Add({new SPosition { latitude = p.Latitude, longitude = p.Longitude };      }); 

0
return (from p in positions
        select new SPosition 
        {
            latitude = p.Latitude,
            longitude = p.Longitude
        }).ToList().SerializeToJson();

0

第一个想法:

 return positions.Select(p => new SPosition 
        { 
            latitude = p.Latitude, 
            longitude = p.Longitude 
        }).ToList().SerializeToJson<List<SPosition>>();

还没有机会测试代码,但我认为它会起作用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接