2017-09-15 9 views
0

を使って、結合された2つのリストから最初のリストの数を取得する2つのリストを結合する次のコードがあります。Linq C#

public List<Summary> GetSummary() 
{ 
    List<Summary> summ = new List<Summary>(); 
    summ = (
     from xyz in (
      from list1 in GetList1() 
      join list2 in GetList2() on list1.ID equals list2.ID 
      select new { list1, list2 } 
      ) 
     group xyz by new { xyz.list1.ID } into g 
     select new Summary 
     { 
      ID = g.Key.ID, 
      ItemCount = g.Sum(x => 1), //getting wrong count //g.Count() is also not working. 
      Quantity = g.Sum(x => x.list1.Quantity), 
      Weight = g.Sum(x => x.list2.Weight), 
      Time = TimeSpan.FromHours(Convert.ToDouble(g.Sum(x => x.list1.Time))).ToString(@"dd\.hh\:mm\:ss"), 
     } 
      ).ToList(); 
    return summ; 
} 

私は最初のリスト(List1)のカウントを取得したいが、私は間違ったカウント(倍数)を得ている。例えば。アイテム数が6の場合、結果は36になります。

+0

どちらのリストにも重複IDはありませんか? –

+0

はい。重複はありません。 2番目のリストは、IDフィールドとWeightフィールドのみを持っています。 –

+0

また、最初のリストの項目も一意である –

答えて

1

これを試すことができますか?私はちょうどIDプロパティでGroupJoinを使用し、あなたと同じロジックを使いました。

var summ = GetList1().GroupJoin(GetList2(), l1 => l1.ID, l2 => l2.ID, 
      (l, g) => new Summary 
      { 
       ID = l.ID, 
       ItemCount = g.Count(), 
       Quantity = l.Quantity, 
       Weight = g.Sum(x => x.Weight), 
       Time = TimeSpan.FromHours(Convert.ToDouble(g.Sum(x => x.Time))).ToString(@"dd\.hh\:mm\:ss"), 
      }).ToList(); 
+0

ありがとう、しかし、私はいくつかのフィールドを取得することはできません。 Ex。数量、時間はリスト1から来て、重量はリスト2から来ます。 –

+0

は "l"でフィールドにアクセスします。リスト1と "g"から来ています。リスト2から来ています。 – SMA

1

私はこのクエリを書き直しました。以下を試してください。最初にコレクションに参加し、必要なアイテムを入手します。次に、重複を防ぐグループを実行できます。

public List<Summary> GetSummary() 
     { 
      List<Summary> summ = new List<Summary>(); 
      summ = (
         from list1 in GetList1() 
         join list2 in GetList2() on list1.ID equals list2.ID 
         select new 
         { 
          ID = list1.ID, 
          Quantity = list1.Quantity, 
          Weight = list2.Weight, 
          Time = list1.Time 
         } 
         into list 
         group list by new { list.ID } into g 
         select new Summary 
         { 
          ID = g.Key.ID, 
          ItemCount = g.Count(), 
          Quantity = g.Sum(x => x.Quantity), 
          Weight = g.Sum(x => x.Weight), 
          Time = TimeSpan.FromHours(Convert.ToDouble(g.Sum(x => x.Time))).ToString(@"dd\.hh\:mm\:ss"), 
         } 
        ).ToList(); 

      return summ; 
     } 
+0

@christo issac - もしあなたが役に立ったら答えを受け入れる –

+0

ポストをありがとう。私はまだ重複をカウントしています。したがって、すべての私のコードを内部的にチェックする。一度やって更新します。 –