이 유형의 문제에 대한 레이블을 수정해야하는지 확실하지 않지만 다음과 같은 일반적인 솔루션에 대한 생각이 있습니까?중첩 된 그룹화 전략/알고리즘 C#
이var invoices = new List<Invoice>()
{
new Invoice() { Id = 1, Customer = "a", Date = DateTime.Parse("1/1/2009") },
new Invoice() { Id = 2, Customer = "a", Date = DateTime.Parse("1/2/2009") },
new Invoice() { Id = 3, Customer = "a", Date = DateTime.Parse("1/2/2009") },
new Invoice() { Id = 4, Customer = "b", Date = DateTime.Parse("1/1/2009") },
new Invoice() { Id = 5, Customer = "b", Date = DateTime.Parse("1/1/2009") },
new Invoice() { Id = 6, Customer = "b", Date = DateTime.Parse("1/2/2009") }
}
같은 지정 뭔가 내가 사용할 수있는 어떤 기술 : 같은 그래프
var tree = invoices.ToHeirarchy(t => {
t.GroupBy(x => x.Date);
t.GroupBy(x => x.Customer);
})
결과도
Date "1/1/2009"
Customer a
Invoice 1
Customer b
Invoice 4
Invoice 5
Date "1/2/2009"
Customer a
Invoice 2
Invoice 3
Customer b
Invoice 6
그리고이 허용 송장의 집합을 감안할 때
다음과 같이 전달하십시오 (모든 레벨의 송장에 대한 계산을 허용)? 대신 나무의
Assert.AreEqual(3, tree.Node[0].Items.Count)
Assert.AreEqual(DateTime.Parse("1/1/2009"), tree.Node[0].Key)
Assert.AreEqual(3, tree.Node[1].Items.Count)
Assert.AreEqual(DateTime.Parse("1/2/2009"), tree.Node[1].Key)
Assert.AreEqual("a", tree.Node[0].Node[0].Key)
Assert.AreEqual(1, tree.Node[0].Node[0].Items.Count)
Assert.AreEqual("b", tree.Node[0].Node[1].Key)
Assert.AreEqual(2, tree.Node[0].Node[1].Items.Count)
투영의 관점에서 무엇을 찾고 계십니까? 익명 형식, 미리 정의 된 형식, DataSet 또는 사전과 같은 일부 일반 채워진 구조? – jpierson