0

これらのドメインオブジェクトがあるとします。

    DataPoint  
    =========  
    public int Id {get;set;}  
    public int TypeId  {get;set;}  
    public string Name  {get;set;}  

    Connector
    =========  
    public DataPoint DataPoint1 {get;set;}  
    public int DataPoint1Id {get;set;}
    public DataPoint DataPoint2 {get;set;}   
    public int DataPoint2Id {get;set;}
    public string Name {get;set;} 
    public int TypeId {get;set;}  

私はList<Connector>

    List<Connector> _Connectors = new List<Connector>()
    {
     new Connector(){Name = "a", DataPoint1Id = 1, DataPoint2Id = 2},...
     new Connector(){Name = "b", DataPoint1Id = 1, DataPoint2Id = 2},... 
     new Connector(){Name = "c", DataPoint1Id = 1, DataPoint2Id = 2},...  
     new Connector(){Name = "d", DataPoint1Id = 2, DataPoint2Id = 1},...
     new Connector(){Name = "e", DataPoint1Id = 2, DataPoint2Id = 1}...
    }

私は次のようにLINQでグループ化を行っています:

    var groups = (from C in _Connectors
                  group C by new { C.DataPoint1Id, C.DataPoint2Id }
                  into cGroup                                             
                  select new {cGroup.Key.DataPoint1Id, cGroup.Key.DataPoint2Id,      
    cGroup.ToList(), cGroup.Count()});

varグループは以下を保持します:

    DataPoint1Id = 1, DataPoint2Id = 2, list of connectors -"a","b","c", count = 3
    DataPoint1Id = 2, DataPoint2Id = 1, list of connectors - "d","e", count = 2  

これらの2つのオブジェクトを1つにマージしたいと思います:

    DataPoint1Id = 1, DataPoint2Id = 2, list of connectors - "a","b","c","d","e", count = 5

どうすればそれを達成できますか?

4

1 に答える 1

1

どうですか

var groups =
    from C in _Connectors
    group C by new
        {
            Min = (int)Math.Min(C.DataPoint1Id, C.DataPoint2Id),
            Max = (int)Math.Max(C.DataPoint1Id, C.DataPoint2Id)
        }
    into cGroup
    select new
        {
            DataPoint1Id = cGroup.Key.Min,
            DataPoint2Id = cGroup.Key.Max,
            Connectors = cGroup.ToList(),
            Count = cGroup.Count()
        };
于 2012-06-18T12:37:14.837 に答える