2016-09-02 7 views
2

に影響を与えていない私は、テストケースを作った:コレクション

私はこの

Id|IdA|IdW|Quantity 
1 1 3 5 
2 1 4 2 
3 2 5 3 

Idのような表に主キー、IdA文書番号である必要があり、IdWはボックスID、quantityは記事の量です。

今、私は量を合計することにより、IdAグループに持っているので、私がやっている:ここで

var groups = 
     models 
      .GroupBy(x => new { x.IdA }) 
      .Select 
      (
       x => 
        new Model 
        { 
         Id = (x.Select(y => y.Id).Count() > 1) ? 0 : x.Select(y => y.Id).First(), 
         IdA = x.Key.IdA, 
         Qty = x.Sum(y => y.Qty) 
        } 
      ); 

modelsは、上記の表です。それは正常に動作し、グループ化が行われていないときにプライマリキーを保持することもできました(IdA

今私はこれをしたいと思います:グループ化されていないもののためにIdW 。理想的な結果は次のようになります

foreach(var e in groups) 
{ 
    var nonGroupedRow = models.Where(x => e.Id != 0 && x.Id == e.Id).FirstOrDefault(); 
    var targetModel = groups.FirstOrDefault(x => x.Id == e.Id); 
    if(nonGroupedRow != null && targetModel != null) 
    { 
     targetModel.IdW = nonGroupedRow.IdW; 
    } 
} 

:私は主キーを用いて行を検索し、このように、グループにIdW設定、グループにforeachの操作を行うことを試みた

Id|IdA|IdW|Quantity 
0 1 0 7 
3 2 5 3 

これは信じられないほどうまくいかない。両方のグループにはまだIdW = 0があります。

void Main() 
{ 
    var a = new List<A> { new A { Id = 1 }, new A { Id = 2 } }; 
    a.FirstOrDefault(x => x.Id == 1).Id = 2; 
    // both have Id = 2 
} 

class A 
{ 
    public long Id {get;set;} 
} 

これは私の頭の中で働くだけで、上の例も与えられていますが、そうではありません。どこが間違っていますか?

+0

あなたは 'Id'を行う方法とほぼ同じである必要がありました。そしてそれは 'x.Count()> 1に短縮できますか? 0:x.First()。Id'。 – juharr

+0

左外部結合を使用します。 msdn:https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b – jdweng

答えて

0

は、まずあなたのカウントが、最初に自分のIDを取得するために同じ

第二に、同じことになりますが、IDをカウントすることを指定する必要はありませんのでによるグループで見つかったエントリの量をカウントしていますそこ

からその後、idプロパティをグループ化されたデータから、最初のエントリを取るあなたは基本的に答え

var groups = 
     models 
     .GroupBy(x => new { x.IdA }) 
     .Select 
     (
      x => 
       new Model 
       { 
        Id = (x.Count() > 1) ? 0 : x.First().Id, 
        IdA = x.Key.IdA, 
        IdW = (x.Count() > 1) ? 0 : x.First().IdW, 
        Qty = x.Sum(y => y.Qty) 
       } 
     ); 
+0

を参照してください。 – Neil

+0

これには本当にトグルではありませんでしたか?ありがとう – Phate01

関連する問題