에 영향을 미치는되지 내가 테스트 케이스로 구성 : IdA
이 자료는 기본 키 나는이컬렉션
Id|IdA|IdW|Quantity
1 1 3 5
2 1 4 2
3 2 5 3
Id
같은 테이블이
을하다 , IdW
은 상자 ID이며 수량은 기사의 양입니다.
는 지금은 수량을 합산 IdA
에 의해 그룹에, 그래서 내가하고 있어요 :
models
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)
}
);
위의 테이블입니다. 그것은 잘 작동합니다, 나는 또한 그룹화가 이루어지지 않을 때 프라이 머리 키를 유지할 수있었습니다. (오직 하나만 존재합니다.)
이제 이것을하고 싶습니다 : 그룹화되지 않은 것들에 대해 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