我在这里面临一个问题。
目标是使用4个值(Origin.PositionCoordinates.XOrigin.PositionCoordinates.YDestination.PositionCoordinates.XDestination.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/

10-11 09:27