繁体   English   中英

这个Lambda表达式有什么问题?

[英]What's wrong with this Lambda expression?

这是我的代码:

var coordinateTratte = doc.Descendants(ns + "Folder").First().Descendants(ns + "Folder")
    .Descendants(ns + "Placemark").Select(n =>              
    {
        string[] coordinates = n.Descendants(ns + "coordinates").First().Value.Split(' ');
        foreach (var coordinate in coordinates)
        {
            var coordinateLatLng = coordinate.Split(',');
            return new
            {
                latitude = coordinateLatLng.Last(),
                longitude = coordinateLatLng.First()
            };
        }
    });

它说n =>附近有些值不能表示为Lambda表达式。

我哪里错了?

问题是你的lambda表达式尝试使用循环返回“piecemeal”项,而Select期望它一次返回整个东西。

您可以通过多种方式修复代码 - 例如,您可以将foreach循环转换为Select ,并使用SelectMany ,如下所示:

var coordinateTratte = doc.Descendants(ns + "Folder").First().Descendants(ns + "Folder")
    .Descendants(ns + "Placemark").SelectMany(n =>
    { //                                 ^^^^
        string[] coordinates = n.Descendants(ns + "coordinates").First().Value.Split(' ');
        return coordinates
           .Select(coordinate => coordinate.Split(','))
           .Select(coordinateLatLng => new
            {
                latitude = coordinateLatLng.Last(),
                longitude = coordinateLatLng.First()
            });
    });

我想返回一个对象,如Dictionary<string,List<object>> ,其中object是纬度和经度

您可以像这样更改代码:

var coordinateTratteDict = doc.Descendants(ns + "Folder").First().Descendants(ns + "Folder")
    .Descendants(ns + "Placemark").Select((n,i) =>
    {
        string[] coordinates = n.Descendants(ns + "coordinates").First().Value.Split(' ');
        return new {
            Index = i
        ,   CoordList = coordinates
           .Select(coordinate => coordinate.Split(','))
           .Select(coordinateLatLng => new
            {
                latitude = coordinateLatLng.Last(),
                longitude = coordinateLatLng.First()
            })
            .ToList()
        };
    })
    .ToDictionary(p => "Block_"+p.Index, p => p.CoordList);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM