我在这里面临一个问题。
目标是使用4个值(Origin.PositionCoordinates.X
,Origin.PositionCoordinates.Y
,Destination.PositionCoordinates.X
,Destination.PositionCoordinates.Y
)对集合进行分组。
我收到错误说明:
匿名类型不能具有相同名称的多个属性。
我无法更改设计(无法更改类属性)。有解决方案吗?以下是我正在努力的示例代码。
private bool EdgeCollectionIsAppropriate(Dictionary<int, DijkstraEdge> theEdges)
{
if (theEdges.GroupBy(variable => new {
variable.Value.Origin.PositionCoordinates.X,
variable.Value.Origin.PositionCoordinates.Y,
variable.Value.Destination.PositionCoordinates.X,
variable.Value.Destination.PositionCoordinates.Y }).Any(x=>x.Count()>1))
{
logger.Debug("The edges list contains 2 or more edges with same destnation and origin position");
return false;
}
return true;
}
最佳答案
请注意,您正在创建一个具有2个名称为X
的属性的匿名类型。
而是为字段指定明确的名称:(您不必对所有字段都进行处理。仅对名称冲突的字段就足够了)
theEdges.GroupBy(v=> new {
OriginX = v.Value.Origin.PositionCoordinates.X,
OriginY = v.Value.Origin.PositionCoordinates.Y,
v.Value.Destination.PositionCoordinates.X,
v.Value.Destination.PositionCoordinates.Y })
同样也不清楚将所有内容写在if语句中。而是将查询结果存储在变量中,然后使用if语句:
var dupDestAndOrigin = theEdges.GroupBy(v=> new {
OriginX = v.Value.Origin.PositionCoordinates.X,
OriginY = v.Value.Origin.PositionCoordinates.Y,
v.Value.Destination.PositionCoordinates.X,
v.Value.Destination.PositionCoordinates.Y })
.Any(x => x.Count() > 1);
if(dupDestAndOrigin)
{
// TODO - log
return false;
}
return true;
关于c# - 在Linq中按多个值分组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46337870/