2016-11-18 1 views
-1

私はアイテムのリストを持っています。クラスは次のようになります。グループLinq発行

public class DeviceControllerDoorInfo 
{ 

    [DataMember] 
    public string DeviceControllerId { get; set; } 
    [DataMember] 
    public string DeviceControllerName { get; set; } 
    [DataMember] 
    public string DoorId { get; set; } 
    [DataMember] 
    public string DoorName { get; set; } 

} 

、データは次のようになります。

DoorId DoorName ControllerId ControllerName 
------ -------- ------------ -------------- 

Door1 DoorOne C1   C1 
Door2 DoorTwo C1   C1 
Door3 DoorThree C2   C2 

私はそれのように見えるように、それを変換することにしたいです。

public class AccessGroupControllerDoorEntity 
{ 
    public string ControllerId { get; set; } 
    public string ControllerName { get; set; } 

    public List<AccessGroupDoorEnity> Doors { get; set; } 
} 

public class AccessGroupDoorEnity 
{ 
    public string DoorId { get; set; } 
    public string DoorName { get; set; } 
} 

グループControllerIdでグループ化し、ドアアイテムを一覧表示します。

どうすればよいですか?

は、私が試した:

  var controllersId = allDoors.GroupBy(e => e.DeviceControllerId).Select(x => x); 

しかし、それはリストとしてドアを作るのですか?

わかりません。助けてください。私のデータサービス

private AccessGroupEntity ConvertDoorsToEntity(DeviceControllerDoorInfo[] allDoors) 
    { 
     // return null if the object is invalid. 
     if (allDoors != null) 
     { 
      AccessGroupEntity entity = new AccessGroupEntity(); 

      entity.ControllerDoorItems = new List<AccessGroupControllerDoorEntity>(); 

      //Convert to requested format instead of the below 

      foreach (var door in allDoors) 
      { 
       entity.DoorItems.Add(new DoorInfoEntity 
       { 
        DoorId = door.DoorId, 
        DoorName = door.DoorName, 
        ControllerId = door.DeviceControllerId, 
        ControllerName = door.DeviceControllerName 
       }); 

      } 

      return entity; 

UPDATE

しかし、その代わりに、私はentity.ControllerDoorItemsは、以下のグループ化されたデータのように含まれるようにする:あなたはGroupBy(e => e.ControllerId)それを使用する場合

ControllerId -> C1 
    ControllerName -> C1 
    Doors ->   2 Objects 
+3

あなたはタイトルに記載されているようにGROUPBYを使用する必要があります。あなた自身の努力を示しているか、ここであなたの問題が何であるかを明記してください。 – CSharpie

+2

ここで質問は何ですか?何を求めているのかを明確にしてください。 'controllersId'をリストにする方法を尋ねていますか?あなたのデータをグループ化する方法を尋ねていますか?そうであれば、 "それが似ている"ように見えるようにするには、 "それ"が指定されていないので、良い説明ではないことを教えてください。 "どうやってするの?"いずれか良い問題の説明ではありません。ここに「それ」とは何ですか? –

+0

@ LasseV.Karlsen更新された質問を見つけてください。 – StrugglingCoder

答えて

0
DoorId DoorName ControllerId ControllerName 
------ -------- ------------ -------------- 

Door1 DoorOne C1   C1 
Door2 DoorTwo C1   C1 
Door3 DoorThree C2   C2 

リットする最初のリストには2つの項目があり、ここでControllerIdC1であり、もう1つはControllerIdがC2である項目を持つリストです。

したがって、GroupByはアイテムではなくリストを返します。あなたの更新のために質問

List<AccessGroupControllerDoorEntity> grouped = allDoors.GroupBy(e => e.ControllerId) 
     .Select(group => new AccessGroupControllerDoorEntity 
         { 
          DeviceControllerId = group.Key.Id, 
          DeviceControllerName = group.Key.Name, 
          Doors = group.ToList() 
         }); 
+0

@私は質問を更新しました。見つけていただけますか? – StrugglingCoder

+0

私の回答を更新しました –

+0

しかし、DeviceControllerDoorInfoにControllerIdが含まれていない、DeviceControllerIdが含まれていますが、group.key.Idがエラーをスローします。私はそれが2つのドアオブジェクトを返すので、そのKey.IdまたはKey.Nameは理にかなっていないと思います。助けてください。 – StrugglingCoder

0

あなたが試すことができ

  var list= allDoors.GroupBy(x=>new {x.ControllerId ,Name=ControllerName}, 
      (key, group) => new AccessGroupControllerDoorEntity 
      { 
       ControllerId=Key.ControllerId , 
       ControllerName=Key.ControllerName, 
       Doors = group.ToList() 
      })) 
      .ToList();