这个 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 表达式尝试使用循环 return 项目 "piecemeal",而 Select
期望它立即 return 整个事情。
您可以通过多种方式修复您的代码 - 例如,您可以将 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()
});
});
I want to return an object such as Dictionary<string,List<object>>
where object is latitude and longitude
您可以这样更改代码:
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);
这是我的代码:
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 表达式尝试使用循环 return 项目 "piecemeal",而 Select
期望它立即 return 整个事情。
您可以通过多种方式修复您的代码 - 例如,您可以将 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()
});
});
I want to return an object such as
Dictionary<string,List<object>>
where object is latitude and longitude
您可以这样更改代码:
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);