に影響を与えていない私は、テストケースを作った:コレクション
私はこの
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;}
}
これは私の頭の中で働くだけで、上の例も与えられていますが、そうではありません。どこが間違っていますか?
あなたは 'Id'を行う方法とほぼ同じである必要がありました。そしてそれは 'x.Count()> 1に短縮できますか? 0:x.First()。Id'。 – juharr
左外部結合を使用します。 msdn:https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b – jdweng