2017-09-21 12 views
2

私はここで少し問題に直面しています。 目的は、Origin.PositionCoordinates.XOrigin.PositionCoordinates.YDestination.PositionCoordinates.XDestination.PositionCoordinates.Yの4つの値を使用してコレクションをグループ化することです。複数のグループによる値Linq

私はエラーが述べ得る:

匿名型は、同じ名前の複数のプロパティを持つことはできません。

デザインを変更することはできません(クラスプロパティは変更できません)。これに対処する解決策はありますか?以下は私が苦労しているサンプルコードです。

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; 
} 

答えて

3

注意してください。 代わりにフィールドに明示的な名前を与える:(。あなたは、競合する名前でちょうど1にそれらのすべてを行う必要はありません十分です)

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; 
0

名前を変更してください。同じオブジェクトに2つのXと2 Yのプロパティを持つことはできません。名前Xと2つのプロパティを持つ匿名型を作成している

private bool EdgeCollectionIsAppropriate(Dictionary<int, DijkstraEdge> theEdges) 
    { 

     if (theEdges.GroupBy(variable => new { A=variable.Value.Origin.PositionCoordinates.X, B=variable.Value.Origin.PositionCoordinates.Y,C=variable.Value.Destination.PositionCoordinates.X, D=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; 
    } 
関連する問題